2011-12-15 60 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]); 

在一次讀取三個項目,並重復,直到文件的末尾。

相關問題