Чтение данных из файла.txt в Matlab
Я тщетно пытался несколько дней сделать одну, казалось бы, простую вещь - я хочу прочитать данные из файла.txt, который выглядит следующим образом:
0.221351321
0.151351321
0.235165165
8.2254546 E-7
в Matlab. Я смог загрузить данные в файл.txt в виде вектора столбца с помощью команды fscanf, например, так:
U=fscanf(FileID, '%e')
при условии, что сначала я просматриваю файл и удаляю пробел перед буквой "E", где бы ни встречалась научная запись в наборе данных.
Поскольку мне нужно создать большое количество таких наборов, было бы нецелесообразно выполнять поиск и замену для каждого файла.txt.
Есть ли способ для Matlab прочитать данные в том виде, как они появляются, как в приведенном выше примере (с пробелом, предшествующим 'E'), и поместить их в вектор-столбец?
Для любого, кто знает PARI-GP, альтернативным решением было бы иметь выход без пробелов в первую очередь - но до сих пор я не нашел способа стереть пробел перед 'E' в научной нотации, и я не может предсказать, появится ли число в научной нотации или нет в наборе данных.
Спасибо!
3 ответа
Спасибо всем за помощь, я нашел решение. Есть способ исключить пробел из PARI-GP, чтобы в выходном файле.txt не было пробелов для начала. У меня был установлен выходной сигнал "prettymatrix". Нужно ввести следующее:
? \o{0}
изменить вывод на "Raw", что исключает пробел перед "E" в научной нотации.
В очередной раз благодарим за помощь.
Простой способ, возможно, не самый лучший, состоит в том, чтобы читать строку за строкой, удалять пробел и преобразовывать обратно в число с плавающей запятой.
Например,
x = []
tline = fgetl(FileID);
while ischar(tline)
x = [x str2num(tline(find(~isspace(tline))))]
tline = fgetl(FileID);
end
Один лайнер:
data = str2double(strsplit(strrep(fileread('filename.txt'),' ',''), '\n'));
strrep
удаляет все пробелы, strsplit
принимает каждую строку как отдельную строку, и str2double
покрывает строки в числа.