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

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