2013-05-16 222 views
3

所以,當然,我現在有點麻煩了。我試圖讀取一個文本文件,按照列表順序進行這樣的事情。我想要做的是將數字,字符和字符串列單獨存儲在數組中。如何使用sscanf或fscanf從文件中讀取字符串?

[Numbers] [Characters] [Strings] 

現在,當我想通了如何讀取數字和字符列到自己的陣列中,我似乎不能與字符串列這樣做。至少,不是fscanfsscanf,這是我想要使用的命令。

如何閱讀使用fscanfsscanf這樣的檔案? (我知道關於textscan,我想知道這是可能的fscanf或sscanf)。

好的,讓我在這裏添加一些代碼。所以,我研究這個,而我嘗試了以下內容:

fid = fopen('Data.txt', 'w+'); 
i = 1; 
while ~feof(fid) 
    line = fgets(fid); 
    M(i) = sscanf(line, '%d, %c, %s', [3,inf]; 
    i = i+1; 
end 

這將運行,但中號結束了出來只由數字構成的數據文件中的第一列的行向量。它完全忽略了字符和字符串的存在。

現在,爲了更好地瞭解sscanf函數的我嘗試以下

fid = fopen('Data.txt', 'w+'); 
    i = 1; 
    while ~feof(fid) 
     line = fgets(fid); 
     M(i) = sscanf(line, '%d, %d, %d', [3,inf]; 
     i = i+1; 
    end 

對於數據的組成只是數字的列的樣本集。順便說一下,這和以前完全一樣;它只是讀取數據的第一個數字列並退出。所以,我甚至不知道如何正確使用sscanf,feof或fgets。所以我也可以在這裏使用一些幫助。

而且我知道試圖閱讀只是列數字fscanf微不足道,但我想在這裏理解sscanf和fgets。

回答

2

你正在尋找的功能寧願textscan

它可以讓您閱讀整個文件一次,並指定要讀每一列的格式。

在你的情況下,它應該是這樣的:

fileID = fopen('myfile.txt'); 
C = textscan(fileID, '%f %c %s'); 
fclose(fileID); 
celldisp(C) 

由於我們不知道你的文本文件的完全格式,你可能必須調整格式字符串。

您將獲得一個單元格數組,其中包含根據格式規範解析的文件內容。

Matlab的文檔詳細解釋了可能性,the format specification,並附帶很好的例子。

+0

對,我知道textscan。也許我會研究它,但我不願意,因爲命令只存在,據我所知,在matlab中,這可能不是我唯一想做的事情。 我會研究一下,但是,我想再次知道這是否適用於fscanf或sscanf。 而且,我的意思是,我所說的確實是文本文件的格式。只需很長時間(數千個值)的數字,字符和字符串列。 在很多方面,我只是好奇在這裏看看如何用fscanf和sscanf來做到這一點。也許這是愚蠢的,但是...我想知道。 – GeneralPancake

+0

嗯,我不得不承認textscan完美的作品,說實話,真的讓我很煩惱。我只是,真的很想知道如何使用sscanf和/或fscanf來做到這一點。它必須是可能的,我真的不在乎它有多少痛苦。 – GeneralPancake