2017-03-03 11 views
1

많은 수의 텍스트 파일을 읽고 특정 열의 최대 값과 해당 시간을 찾습니다. 이 값을 찾는 for 루프는 정상적으로 작동하지만 문제는 for 루프의 각 반복에 필요한 세 변수 (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 

텍스트 파일은 결국 모든 반복 대신 하나의 반복에 대한 값을 제공합니다. 해결 방법으로 displaytable을 사용할 수 있었지만 숫자가 아닌 문자가 포함 된 "thisfilename"을 쓰는 데 문제가 있습니다.

+0

셀에 값을 저장하고 for-loop 외부의 파일에 셀을 쓰는 방법은 어떻습니까? – 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

을 - 그것을 단순히 루프 이후 출력 파일을 닫는 것을 잊어 버렸습니다. 도와 주셔서 감사합니다!