2011-12-15 57 views
1

我正在参加一个基础的MATLAB大学课程,需要我的代码帮助。是否可以索引从外部.txt文件中提取的字符串?

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

文本文件中读取25个不同的姓名和电话号码 (即:

鲍勃·史密斯简 李四比尔 约翰逊

...等...)

这是我目前的通用代码:

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

我今天早些时候回答我自己的问题,但这里是我发现如果有人有兴趣:

您使用大括号,而不是直的人有指标线串的。

即:

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

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

fprintf中将打印取其数索引被提供。

thanks否则kavka:]

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

在一次读取三个项目,并重复,直到文件的末尾。

相关问题