Чтение текстовых и числовых данных из файла.dat в matlab

Здесь я делюсь одним из моих данных, которые находятся в файле.dat. У меня 16162 разных файлов. Я объединил все в один файл и хочу прочитать его в matlab, и мне нужно извлечь значения трех параметров из одного файла и расположить их либо по строкам, либо по столбцам. Я могу сделать это с помощью C Sharp кодов, но я хочу сделать это с помощью Matlab. Кто-нибудь может мне помочь с написанием кодов, пожалуйста?

Вот один пример данных файла:

РАСПРЕДЕЛЕНИЕ: мономодальное логарифмическое нормальное n: 1.000 r_mod:.010 сигма: 1.400

число конц., поверхность. конц., том конц. (см ^-3) (мю ^2 см ^-3) (мю ^3 см ^-3) .1087E+01 .1866E-02 .7878E-05

часть. пр. Радиус, прибой. пр. радиус, об. пр. радиус: .1149E-01 .1169E-01 .1201E-01

средний радиус поверхности, средний объемный радиус: .1267E-01 .1392E-01

эфф. Дисперсия: .9939E-01

Допустим, я хочу извлечь или прочитать три параметра (r_mod, sigma, Surface означает радиус). Соответствующие значения для этих трех параметров из файла, который я поместил на этой странице:.010, 1.400, .1267E-01

Выход должен быть (который я хочу):

r_mod   sigma   surface mean radius 
.01     1.4        1.27E-02 
.02     1.4        2.67E-02 
.03     1.4        3.98E-02 
...     ..           .. ..  
..       ..         .. .. 

У меня есть более тысячи похожих файлов в одном каталоге. Я хочу прочитать все эти файлы в Matlab, и вывод должен отображаться таким образом в одном файле.

1 ответ

Решение

Если все ваши файлы строго идентичны, за исключением числовых значений, вы можете попробовать использовать функцию Matlab textscan и укажите формат каждой строки.

Вот пример того, как вы могли бы сделать это:

fid=fopen('text.dat','r');
format={'DISTRIBUTION: monomodal log-normal n : %f r_mod: %f sigma: %f'; ...
        'number conc., surface. conc., volume conc. (cm^-3) (mu^2cm^-3) (mu^3cm^-3) %f %f %f'; ...
        'part. ave. radius, surf. ave. radius, vol. ave. radius : %f %f %f'; ...
        'surface mean radius, volume mean radius : %f %f'; ...
        'eff. variance : %f'};
data=cell(numel(format),1);
for i=1:numel(format)
    data{i}=textscan(fid,format{i},1);
end
fclose(fid);

В этом примере вы можете получить доступ к числовым значениям в массиве ячеек. data, r_mod это data{1}{2} Сигма есть data{1}{3} а поверхность означает радиус data{4}{1} и так далее. Тогда это только вопрос организации этих данных и сохранения коллекции в файл с помощью fprintf написать заголовки и dlmwrite добавить данные.

Другие вопросы по тегам