MATLAB: экспорт скаляров внутри цикла for в текстовый файл

У меня есть большое количество текстовых файлов, которые я должен прочитать, найти максимальное значение для определенного столбца и соответствующее время. Цикл for для поиска этих значений работает нормально, но моя проблема заключается в написании текстового файла, в котором показаны три переменные, которые мне нужны (thisfilename, M и wavetime) для каждой итерации цикла 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", которое включает нечисловые символы.

2 ответа

Решено - просто я забыл закрыть выходной файл после цикла. Спасибо за помощь!

Хотя я не могу воспроизвести проблему с предоставленным кодом, возможное решение может заключаться в записи в файл вне цикла и последующем закрытии файла:

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);
Другие вопросы по тегам