load() - игнорирование данной строки

Я пытаюсь использовать функцию load() в MATLAB для чтения данных из текстового файла. Однако каждая строка текстового файла заканчивается на «...». Файл данных не создается MATLAB, поэтому я не могу контролировать источник эллипсов.

Файл данных, который я загружаю, выглядит примерно так:

11191425        NaN     NaN     0.0 ...
11191426        NaN     NaN     0.0 ...
11191427        NaN     NaN     0.0 ...
11191428        NaN     NaN     0.0 ...
11191429     2280.5  1910.1   455.0 ...
11191430     2280.5  1910.1   455.0 ...
11191431     2298.0  1891.1   454.0 ...
11191432     2317.3  1853.7   453.0 ...
11191433     2335.6  1811.1   458.0 ...
11191434     2350.6  1769.8   466.0 ...
11191435     2365.3  1729.7   475.0 ...
11191436     2379.5  1691.2   485.0 ...
11191437     2378.3  1647.6   492.0 ...
11191438     2375.4  1621.3   499.0 ...
11191439     2372.7  1598.5   499.0 ...
11191440     2372.7  1598.5   499.0 ...
11191441        NaN     NaN     0.0 ...
11191442      294.9  1283.5  1163.0 ...
11191443      294.9  1283.5  1163.0 ...

Его фактическая длина превышает 100 000 строк, но вы поняли идею. Использование команды load() вызывает ошибку из-за '...' в конце каждой строки. Все, что я ищу, это читать в этих первых четырех колонках.

Каким будет наиболее эффективный способ загрузки данных, при этом полностью исключая мошеннический столбец с многоточием в конце? Предпочтителен, хотя и не обязателен, метод, не заставляющий систему дважды анализировать весь текстовый файл.


person CaptainProg    schedule 15.08.2012    source источник
comment
Как насчет промежуточной санитарной процедуры? Существует множество утилит командной строки, которые могут легко решить эту проблему.   -  person TheZ    schedule 15.08.2012
comment
Не могли бы вы уточнить? Я должен указать, что хочу сохранить как можно больше кода в MATLAB, а не полагаться на внешние утилиты.   -  person CaptainProg    schedule 15.08.2012


Ответы (1)


Это довольно просто, если вместо загрузки вы используете textscan. Вы можете рассматривать этот последний столбец как строковый столбец, а затем просто игнорировать его.

fid = fopen('data.txt');
data = textscan(fid,'%d %f %f %f %s');
fclose(fid);

Затем вы можете сделать вывод одной матрицей, объединив столбцы, которые вы хотите сохранить вместе.

data = [data{1:4}];

Пятая колонка просто заполнена строками '...'. Вы можете просто игнорировать это.

person lawinslow    schedule 15.08.2012