2017-03-03 11 views
1

私には読みたいテキストファイルがたくさんあり、特定の列の最大値とそれに対応する時間があります。これらの値を見つけるためのforループは正常に動作しますが、私の問題は、forループの各繰り返しで必要な3つの変数(thisfilename、M、およびwavetime)を示すテキストファイルを作成することです。MATLAB:forループ内のスカラーをテキストファイルにエクスポートする

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 

テキストファイルは、すべての文字列ではなく、1つの繰り返しの値を与えるだけです。私は回避策としてdisplaytableを使用することができましたが、非数値文字を含む "thisfilename"の記述に問題があります。

+0

セルに値を保存し、セルをforループの外側のファイルに書き込む方法はありますか? – NKN

+0

ループの後に出力ファイル 'fclose(writefile)'を最後に閉じることはありません。あなたはそれを例に含めることを忘れましたか? – Hoki

答えて

0

私は提供されたコードで問題を再現することはできないのですが、可能な解決策は、ループの外でファイルに書き込み、その後、ファイルをクローズすることがあります解決

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

- それはループ後に出力ファイルを閉じるのを忘れてしまっただけです。助けてくれてありがとう!

関連する問題