我在基础的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.
任何想法?我知道这很疯狂,但任何帮助将不胜感激! :
答案 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:]