2016-10-31 6 views
-4

Ich habe eine .txt-Datei in diesem Format:Wie Zeilen einer Textdatei nach dem ersten Wort sortiert werden?

22 BLBL asas saaa212 x:12 y:123 
66 BLadsBL asas saaa212 x:12 y:123 
32 BLadsBL asas saaa212 x:13212 y:123 
66 BLadsBL asas saaa212 x:1332 y:123 

Wie eine neue TXT-Datei mit diesen Zeilen durch den ersten Wert sortierten schaffen?

+0

Ps ich interessiere mich nicht für Geschwindigkeiten, nur der einfachste Code – JohnnyF

+0

Für die Zukunft vermeiden Sie bitte, etwas mit einer irrelevanten Sprache zu markieren. –

+0

ja ich tat, ich tat es mit Indexen der benutzten Linien behalten und gerade über die Akte immer wieder laufen, (und tun intcept) aber dieses ist rly hässlicher Code und ich hoffe, dass jemand gimme abatter Idee, ich will nicht gerade einen Code eine richtige Art darüber nachzudenken – JohnnyF

Antwort

2
inpfid = fopen('InputFile.txt'); %This .txt file contains the data you gave in the question 
allData = textscan(inpfid,'%s','Delimiter','\n'); 
% Read in the first word from each row of data 
outcellarray = regexp(allData{:},'^([\w\-]+)','match'); 
% Store all the first numbers into a single cell array and sort them 
[~, ind] = sort(str2double(vertcat(outcellarray{:}))); 
% Creating a cell with the required order 
output = cellfun(@(x) x(ind), allData, 'UniformOutput', 0); 
% Making it into a form useable for writing a text file 
output= output{:}; 

outfid=fopen('OutputFile.txt','wt+'); %Creating an output file 
for k = 1:length(output)-1 
    %Writing the data 
    fprintf(outfid,output{k}); 
    fprintf(outfid,'\n'); 
end 
fprintf(outfid,output{end}); 
% You can loop from 1 to length(output) and skip the last line 
% but it'll append an extra line at the end of the output file 
fclose(outfid); % Closing the output file 

Vergleich von Ein- und Ausgabedateien:

comparision


PS:
✶ Machen Sie es sicher, dass sowohl Ein- und Ausgabedateien an Ihrem aktuellen Pfad oder Stellen Sie vollständige Pfade wie: 'D: \ Assignment \ InputFile.txt'

✶ I used/kopiert den Code/Ideen aus:
https://stackoverflow.com/a/23357800/5698672
https://stackoverflow.com/a/5041474/3293881
https://stackoverflow.com/a/28348768/5698672
so dass diese Antworten eine Stimme geben, wenn es Ihr Problem löst.

Verwandte Themen