Как я могу прочитать несколько строк в Matlab с TextScan?

Я использовал это:

weights=fopen('indices.txt');
weights=textscan(weights, '%d %d %d %d %d %d %d')

но это только читает первую строку моего файла. мой файл выглядит так:

0 90 100 5 0 0 0 (class)
19 5 0 0 0 0 0 (class2)
5 5 0 0 0 0 0 (class3)
-10 -5 0 0 0 0 0 (class4)

И мне не нужно, что в скобках

Большое спасибо!

2 ответа

Для этого случая вы можете сделать следующее:

fid = fopen('indices.txt');
num_ints = 7;
num_rows = 4;

format = [repmat('%d ', 1, num_ints), '%s'];
weights = textscan(fid, format, num_rows);
weights = [weights{1:num_ints}];
fclose(fid);

Недостатком, конечно, является то, что вы должны знать количество строк, которые вы читаете заранее. Вы могли бы попытаться вызвать текстовое сканирование в цикле, но, похоже, это не то, как оно должно использоваться (и я предпочел бы использовать fgetl вместо этого, если я пытаюсь читать файл построчно).

Используйте следующее:

fh = fopen('indices.txt');
resC = textscan(fh, '%d %d %d %d %d %d %d %s', 1000);
res = cell2mat(resC(1:7))
fclose(fh);

textscan будет только читать (и возвращать) до доступного количества строк. Обратите внимание, что textscan выделяет память для количества строк, которые вы предоставляете (1000 здесь), так что вы хотите выбрать что-то "мудрое" там.

Другие вопросы по тегам