Чтение текстовых и числовых данных из файла .dat в matlab - PullRequest
1 голос
/ 03 апреля 2012

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

номер конц., Поверхность.конц., том конц.(см ^ -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 Ответ

1 голос
/ 03 апреля 2012

Если все ваши файлы строго идентичны, за исключением числовых значений, вы можете попробовать использовать функцию 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 для добавления данных.

...