2013-05-14 414 views
0

我有一個包含重複字符串的文件。文件是非常大的,所以我舉一個簡單的例子:如何在使用MATLAB的文件中查找字符串

a b c 
w a g 
b v f 

我想提取a b到一個數組。我怎樣才能在MATLAB中做到這一點?

+0

是否有一個原因/模式要如何提取字符串(''ab'')涉及的*重複*你的字符串文件? – Schorsch 2013-05-14 17:45:04

+0

不,不幸的。 – newzad 2013-05-14 17:54:25

+0

所以基本上,你正在尋找一個特定的字符串,這將作爲輸入,在一個文件中。 ['''strfind''](http://www.mathworks.com/help/matlab/ref/strfind.html)是否適合你? – Schorsch 2013-05-14 17:56:45

回答

2

嘗試使用TEXTSCAN。你可以用'\ n'分割文件,然後用cell2mat分割文件。

fid = fopen('your_string_file.ext'); 
input = textscan(fid, '%s', 'delimiter', '\n'); 
cellmatrix = cell2mat(input{1}); 


cellmatrix = 
    a b c 
    d f a 
    b v f 

然後,如果有一個特定的模式,你可以行走cellmatrix。假設你想在一行中的a b模式,你可以做到以下幾點:

pattern = ['a', 'b']; 
patindex = 1; 
dims = size(cellmatrix); 
for i=1:dims(1) 
    patindex = 1; 
    for j=1:dims(2) 
     if strcmp(cellmatrix(i,j), ' ') 
      continue 
     end 
     if strcmp(cellmatrix(i,j), pattern(patindex)) 
      patindex = patindex+1; 
      if patindex > length(pattern) 
       FOUND... store location/do what you want 
       patindex = 1; 
      end 
     else 
      patindex = 1; 
     end 
    end 
end 

你可以改變你的支票找到你從矩陣想要的任何圖案。

這假定你的文件會適合內存 - 如果它太大而不能適應你的內存一半,你需要做一些更加棘手的事情,增量傳遞和文件寫入。 !

+0

但是這只是讀取文件 - 我認爲@newzad想在該文件中找到一個字符串。 – Schorsch 2013-05-14 18:02:35

+0

那麼他沒有指定他想要的模式,所以我把它解釋爲他想將文本轉換爲數組。我將增加如何從這個閱讀中獲取一個模式。 – Pyrce 2013-05-14 18:05:54

+0

for循環在這裏是一種矯枉過正。 「strcmp」可以在cellarrays上原生地工作。 – Tik0 2013-05-14 22:02:38

2

後,您必須從答案1,您可以使用STRCMP創建一個真正的的Cellmatrix /落在關於你式樣矩陣:

strcmp(cellmatrix,'a') 

如果你的文件是非常大的,所以它不適合你內存,嘗試讀取一行一行地使用與fgets文件:

fid = fopen('VERYBIGFILE'); 
tline = fgets(fid); 
while ischar(tline) 
    disp(tline) 
    tline = fgets(fid); 
    %% DO SOME STUF WITH THE LINE 
end 
fclose(fid);