чтение в текстовом файле и упорядочение по строкам с использованием MATLAB - PullRequest
1 голос
/ 05 апреля 2011

Я хочу читать в текстовом файле (используя Matlab) с данными, которые не находятся в удобной матричной форме Matlab. Это пример:

{926377200,926463600}

[(48, 13), (75, 147), (67, 13)]

{926463600,926550000}

[(67, 48)]

{926550000,926636400}

[]

{926636400,926722800}

[]
{926722800,926809200}
...

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

Я не могу понять, как использовать текстовое сканирование или другие методы. Немного сложнее то, что методы matlab требуют определенного формата для строк, разделенных разделителями, и здесь четные строки имеют неограниченное количество целочисленных пар.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Вы можете сделать это с помощью textcan. Вам просто нужно указать {} и т.д. как пробел.

Например, если вы поместили пример данных в файл tmp.txt (в текущем каталоге) и выполните следующее:

fid = fopen('tmp.txt','r');
if fid > 0
   numbers = textscan(fid,'%f','whitespace','{,}[]() ');
   fclose(fid);
    numbers = numbers{:} 
end

вы должны увидеть

numbers =

   926377200
   926463600
          48
          13
          75
         147
          67
          13
   926463600
   926550000
          67
          48
   926550000
   926636400
   926636400
   926722800
   926722800
   926809200
1 голос
/ 06 апреля 2011

Просто повторяйте каждый символ. (используйте fscanf или fread или что-то еще). Если символ является числом (используйте str2num), сохраните его как число, если это не число, откажитесь от него и начните сохранять новый номер, когда встретите следующий номер.

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