是否可以索引从外部.text文件中提取的字符串?

时间:2011-12-15 00:24:38

标签: string matlab indexing

我在基础的MATLAB大学课程中,需要一些关于我的代码的帮助。

包含名称的外部.txt文件,并为每个名称分配相应的编号。我的目标是将所有名字,姓氏和数字放入数组中,找到“数字”数组中的最小数字,获取相应的索引器编号,并打印与该数字相关的名字和姓氏。

文本文件读取25个不同的名称和数字 (即:

鲍勃 工匠 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 :(得分:0)

命令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]);

一次读取三个项目并重复直到文件结束。

答案 1 :(得分:0)

我今天早些时候回答了我自己的问题,但如果有人感兴趣的话,我会发现这个问题:

你必须使用花括号而不是直的括号来索引一行字符串。

即:

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

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

fprintf将打印提供的数字索引。

非常感谢kavka:]