2012-06-10 115 views

回答

2

您將創建一個單元陣列:

input_file = fopen('vocab.txt'); 
number_of_lines = fskipl(input_file, Inf); 
frewind(input_file); 
cells = cell(number_of_lines, 1); 
for i = 1:number_of_lines 
    cells{i} = fscanf(input_file, '%s', 1); 
end 
1

只需使用textread (filepath, format)功能:

column1 = textread('/path/to/file', '%s'); # Where '%s' indicates how to read the values of your file: one string per index. 

for i = 1:rows(column1) 
    word = column1{ i }; 

    %do your thing... 
end 

column1單元陣列。這就是爲什麼我們使用{}來訪問它。


注意:如果每行包含2個字用空格隔開,你會打電話:

[column1, column2] = textread('/path/to/file', '%s %s');

性能textread()是基於fscanf的包裝。如果您確實需要文件輸入性能,那麼您可能更願意學習如何正確使用fscanf(...)並設置緩衝區長度。請參閱特倫斯關於如何使用fscanf()的回答。
textread()我的筆記本電腦在〜30秒內讀取了我的100K條4列(2Mb文件)。請參閱評論以獲取更多解釋。

+0

這是一個很好的答案,甚至比接受的答案還要好。我只是想知道如何比較textread和fscanf之間的性能。 – carlossierra

+1

非常好的評論! **實現** 'fscanf'是內建函數(用C++編寫),'textread'是一個八度函數,在其實現中調用fscanf。 fscanf更快。 (在八度調用'which'textread''來查看文件的執行情況)如果你知道你的文件,它會檢查你不會這樣做。 **性能:** 儘量不要在大文件上使用'textread()'。 5-10 Mb應該沒問題(我的筆記本電腦一次用100Mb文件凍結了3個小時)。 對於> = 25 Mb的文件,我建議將文件分成更小的塊。 – JMM