MatLab: открыть файл в виде массива ячеек в виде двумерного массива с помощью кода - PullRequest
0 голосов
/ 04 января 2019

У меня есть программа, которая была разработана для использования через графический интерфейс MatLab, который мне нужно использовать через код командной строки. У меня проблемы с получением его для чтения в файле должным образом. Программа требует, чтобы файл представлял собой массив ячеек строк в двумерном формате (то есть массив строк 40x10). При использовании MatLab GUI я просто использую «Импорт данных», чтобы выделить область 40x10, и загружаю ее как массив ячеек (опция «Текст»: массив строк; в рабочей области отображается как массив ячеек 40х10).

Через код: при использовании следующего кода Matlan для «текстового сканирования»: CellArray = textcan (FileName, '% s% s% s% s% s% s% s% s% s% s', 'Разделитель', ',');

И, используя команду «size» для определения ее размеров ([m, n] = size (Features)), создается впечатление, что она импортируется как массив 1x10, а не как 40x10.

Как загрузить файл в виде массива ячеек 40x10 с помощью кода (не через графический интерфейс) описанным мною способом? Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

При использовании опции «CollectOutput» для опции «Сканирование текста» в MatLab исправлено значение

opt = {'CollectOutput',true};
fmt = '%s%s%s%s%s%s%s%s%s%s';
C = textscan(fid,fmt,opt{:});
C = C{1};
0 голосов
/ 04 января 2019

Если файл представляет собой текстовый файл, в котором каждая строка содержит 10 строк, разделенных запятыми, вы можете попробовать прочитать каждую строку с помощью fgetl, разделив ее на запятые с помощью split(line, ','), преобразовав в ячейку cellstr и наконец, поместив результаты в соответствующую строку. Что-то вроде:

features = cell(40,10);
fid=fopen('filename');
line="just a place keeper";
k = 1;
while ischar(line)
    line=fgetl(fid);
    features(k,:) = cellstr(split(line, ','))'; % Note the ' = transpose into a row
    k = k+1;
end
close(fid);

Надеюсь, это поможет

JAC

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