Импорт данных в Matlab из плохо отформатированного файла

У меня есть большой набор текстовых файлов (данные с разделителями табуляции), которые мне нужно проанализировать. В основном они хорошо оформлены. Однако есть случайно разбросанные строки, содержащие ошибочные символы, как показано ниже. Расположение плохих строк в каждом файле разное, но добавляемые символы всегда одни и те же.

1   3
2   873
3   46
23  99798
23  1
353 79
"23 ,"  967
35  8028
253 615
"235 ," 3924
345 188
345 579
345 419
56  16835
23  449

importdata(filename) импортирует все данные до первой неправильно отформатированной строки, а затем игнорирует остальную часть файла. Я думаю, что мог бы сделать то, что я пытаюсь сделать, с комбинацией fopen и textscan, но я не могу найти правильную комбинацию аргументов, чтобы заставить ее работать.


person 1minus1    schedule 31.05.2012    source источник


Ответы (1)


Попробуйте использовать функцию textread со строкой формата %q. Предполагая, что тестовые данные в вопросе сохранены как test.txt:

>> [a, b] = textread('test.txt', '%q %q');

>> a'

ans = 

  Columns 1 through 9

    '1'    '2'    '3'    '23'    '23'    '353'    '23 ,'    '35'    '253'

  Columns 10 through 15

    '235 ,'    '345'    '345'    '345'    '56'    '23'

>> b'

ans = 

  Columns 1 through 9

    '3'    '873'    '46'    '99798'    '1'    '79'    '967'    '8028'    '615'

  Columns 10 through 15

    '3924'    '188'    '579'    '419'    '16835'    '449'

Затем вы можете использовать str2double для удаления конечных столбцов в a. Например:

>> str2double(a)'

ans =

  Columns 1 through 13

     1     2     3    23    23   353    23    35   253   235   345   345   345

  Columns 14 through 15

    56    23
person Chris    schedule 31.05.2012
comment
Спасибо! Мой окончательный код оказался следующим. [a,b]=textread(имя файла,'%q %q'); data=[str2double(a) str2double(b)]; - person 1minus1; 01.06.2012