Как я могу импортировать данные с неравной длиной строки - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть файл .txt , который я хочу импортировать в matlab (думая с использованием importdata), однако у меня есть некоторые проблемы, связанные с форматом matlab, а также с объемом данных, которые нужно принять.

Файл сгенерирован из программы "TurbSim" .

Формат:

  • 12 строк заголовков

  • 1 строка с 2 числовыми значениями, разделитель пробелов делается с пустым пробелом.

  • 35 строк каждая с 35 числовымизначения, разделитель пробела делается с пустым пробелом.

  • 1 пустая строка пробела

Формат, после заголовков, повторить и Iу меня очень большой файл, я не смог найти способ в скрипте правильно загрузить файл, где у меня есть контроль над тем, какую часть я хочу вынуть.Что мне может понадобиться, так как файл ~ 860 МБ.

Пример txt моей проблемы. исправлено https://drive.google.com/open?id=1FwmrCiz6TaWXYwXYX_v0BwQD-jjbdsE4

1 Ответ

0 голосов
/ 02 апреля 2019

Как насчет этого?

clear;

NUM_HEADERLINES = 12;
DELIM_VALUES = ' ';

fid = fopen('TurbSim.txt');
% skip header
for n = 1:NUM_HEADERLINES, fgets(fid);end

while ~feof(fid)
    % read line
    [line,nl] = fgets(fid);
    % remove newline char
    line = line(1:end-length(nl)); 
    % explode using delimiter
    values = strsplit(line,DELIM_VALUES);
    % in case of leading blanks: skip first empty one
    if isempty(values{1}), values = values(2:end);end
    % skip blank lines
    if isempty(values), continue;end
    % convert to double
    values = str2double(values);
    % now process/save/whatever...
    ...
    fprintf('Read %d values\n',length(values)); % in your example: 2 or 40
%     disp(values);
end

fclose(fid);

Кстати: ваши примеры содержат 40 строк по 40 значений в каждой, а не 35 по 35 в каждой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...