Можно ли индексировать строки символов, извлеченные из внешнего файла .txt? - PullRequest
1 голос
/ 15 декабря 2011

Я учусь на базовом курсе колледжа MATLAB, и мне нужна помощь с моим кодом.

theres внешний файл .txt с именами в нем, с соответствующими номерами, присвоенными каждому имени. Моя цель - поместить все имена, фамилии и номера в массивы, найти наименьшее число в массиве «число», получить соответствующий номер индексатора и распечатать имя и фамилию, связанные с этим номером.

текстовый файл читает 25 разных имен и номеров (i.e.:

Bob кузнец 17 Джейн лань 23 Билл Джонсон 13

... и т.д ...)

вот мой общий код:

1  clear
2
3  clc
4
5
6  fid1=fopen('facedata.txt','rt');
7 
8  for index = 1:1:25
9     firstn(index) = fgetl(fid1);
10    lastn(index) = fgetl(fid1);
11    number(index) = fscanf(fid1,'%f');
12 end
13
14 [distmin,I] = min(dist);
15 fprintf('%5.4f %10s %10.0f', distmin, firstn(I), I);

Я надеюсь, что код будет проходить, заставить matlab распознавать «13» как наименьшее число и выводить «bill johnson» на экран, но если я запускаю код, matlab говорит, что есть ошибки

Subscripted assignment dimension mismatch.' @ line 9.

и

Index exceeds matrix dimensions.' @ the firstn**(I)** in line 15.

есть идеи ?? я знаю, что это безумно долго, но любая помощь будет оценена! :]

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Я ответил сегодня на свой вопрос, но вот что я нашел, если кому-то интересно:

Вы должны индексировать строку строки, используя фигурные скобки вместо прямых.

т.е:.

for index = 1:1:25
firstname{index} = fgetl(fid1);
end

fprintf('%10s', firstn{index});

fprintf будет печатать, какой бы номер индекса не был предоставлен.

спасибо в любом случае кавка:]

0 голосов
/ 15 декабря 2011

Команда fgetl означает чтение строки из текстового файла.Поэтому ваш код читает 2x25 = 50 строк текста.Откуда вы знаете, что в вашем файле столько строк?Вы должны прочитать новую строку, обработать ее и повторять до тех пор, пока не достигнете конца файла:

fid = fopen('fgetl.m');
tline = fgetl(fid);
while ischar(tline)
  disp(tline)
  tline = fgetl(fid);
end
fclose(fid);

Однако это не будет делать то, что вы хотите.Вы должны использовать fscanf для чтения данных в нужном формате.Вы хотите прочитать две последовательные строки (имя, фамилия) и целое число.Таким образом, вы можете использовать

A = fscanf(fid, '%s %s %d', [3 inf]);

для одновременного чтения трех элементов и повторения до конца файла.

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