Чтение текстовых и числовых данных из файла.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
добавить данные.