2017-03-03 2 views
1

Ich habe eine große Anzahl von Textdateien, die ich lesen muss, finden Sie den Maximalwert für eine bestimmte Spalte und die entsprechende Zeit. Die for-Schleife zum Finden dieser Werte funktioniert gut, aber mein Problem ist das Schreiben einer Textdatei, die die drei Variablen, die ich brauche (thisfilename, M und wavetime) für jede Iteration der for-Schleife zeigt.MATLAB: Export Skalare innerhalb von for Schleife in Textdatei

Output_FileName_MaxWaveHeights = ['C:\Users\jl44459\Desktop\QGIS_and_Basement\BASEMENT\Mesh_5_2045\Run_A\','MaxWaveHeights.txt']; 
writefile = fopen(Output_FileName_MaxWaveHeights,'a'); 

dinfo = dir('*.dat'); 
for K = 1 : length(dinfo) 
    thisfilename = dinfo(K).name; %just the name of the file 
    fileID = fopen(thisfilename); %creates numerical ID for the file name 
    thisdata = textscan(fileID,'%f64%f64%f64%f64%f64%f64%f64',500,'HeaderLines',1); %load just this file 
    thisdataM = cell2mat(thisdata); %transforms file from cell array to matrix 
    [M,I] = max(thisdataM(:,5)); %finds max WSE and row it's in 
    wavetime = 2*(I-1); %converts column of max WSE to time 
    fprintf(writefile,'%s %8.4f %4.0f \r\n',thisfilename,M,wavetime); 
    fclose(fileID); %closes file to make space for next one 
end 

Die Textdatei endet nur geben Sie mir die Werte für eine Iteration statt alle von ihnen. Ich konnte Displaytable als Workaround verwenden, aber ich habe Probleme beim Schreiben von "thisfilename", das nicht-numerische Zeichen enthält.

+0

Wie wäre es mit dem Speichern der Werte in einer Zelle und Schreiben der Zelle in die Datei außerhalb der for-Schleife? – NKN

+0

Ich sehe nicht, Sie schließen die Ausgabedatei 'fclose (writefile)' am Ende nach der Schleife. Hast du vergessen, es in das Beispiel aufzunehmen? – Hoki

Antwort

0

Obwohl ich nicht in der Lage bin, das Problem mit dem Code versehen zu reproduzieren, eine mögliche Lösung könnte außerhalb der Schleife in die Datei zu schreiben und die Datei anschließend schließen:

Output_FileName_MaxWaveHeights = ['C:\Users\jl44459\Desktop\QGIS_and_Basement\BASEMENT\Mesh_5_2045\Run_A\','MaxWaveHeights.txt']; 
writefile = fopen(Output_FileName_MaxWaveHeights,'a'); 

s = []; 
dinfo = dir('*.dat'); 
for K = 1 : length(dinfo) 
    thisfilename = dinfo(K).name; %just the name of the file 
    fileID = fopen(thisfilename); %creates numerical ID for the file name 
    thisdata = textscan(fileID,'%f64%f64%f64%f64%f64%f64%f64',500,'HeaderLines',1); %load just this file 
    thisdataM = cell2mat(thisdata); %transforms file from cell array to matrix 
    [M,I] = max(thisdataM(:,5)); %finds max WSE and row it's in 
    wavetime = 2*(I-1); %converts column of max WSE to time 
    s = [s, fprintf(writefile,'%s %8.4f %4.0f \r\n',thisfilename,M,wavetime)]; 
    fclose(fileID); %closes file to make space for next one 
end 

fprintf(writefile,s); 
fclose(writefile); 
0

gelöst - es Ich habe einfach vergessen, die Ausgabedatei nach der Schleife zu schließen. Danke für die Hilfe!

Verwandte Themen