2012-12-10 65 views
0

我是一位Java開發人員,也是Matlab的新手。我有一個文件類似的東西:Matlab從文本文件中讀取列表的列表字符串

Label_X sdfasf sadfl asdf a fasdlkjf asd 
Label_Y lmdfgl ldfkgldkj dkljdkljdlkjdklj 
Label_X sfdsa sdfsafasfsafasf 234|3#ert 44 
Label_X sdfsfdsf____asdfsadf _ dsfsd 
Label_Y !^dfskşfsşk o o o o 4545 

我要的是:

向量(數組)包括標籤:

Label Array: 
Label_X 
Label_Y 
Label_X 
Label_X 
Label_Y 

和清單(對我們的例子中五行)列表中的每個元素都具有分隔字符串的元素大小。我的意思是

Element Number Value(List of strings)    Element size of value list 
-------------- ----------------------    -------------------------- 
1    sdfasf,sadfl,asdf,a,fasdlkjf,asd  6 
2    lmdfgl,ldfkgldkj,dkljdkljdlkjdklj  3 
3    sfdsa,sdfsafasfsafasf,234|3#ert,44 4 
4    sdfsfdsf____asdfsadf,_,dsfsd   3 
5    !^dfskşfsşk,o,o,o,o,4545    6 

我知道這是非常簡單的Java,但我不知道如何在Matlab中實現它。

PS:我正在做的是這樣的。我有一個文本文件包含人的推文。第一個單詞是行中的標籤,其他單詞是與該標籤相關的相應單詞。我將有一個標籤列表和另一個列表,其中包含有關每個標籤的單詞。

回答

0

這可能不是最優的,但它應該做的伎倆

all = textread('test.txt', '%s', 'delimiter', '\n','whitespace', ''); 
List = cell(size(all)); 
for i = 1:size(all) 
    [List{i}.name remain] = strtok(all{i}, ' '); 
    [List{i}.content remain] = strtok(remain, ' '); 
    j = 0; 
    while(size(remain,2)>0) 
     j = j+1; 
     List{i}.content = [List{i}.content temp ',']; 
     [temp remain] = strtok(remain, ' '); 
    end 
    List{i}.size = j; 
end 
+0

它在這裏給出錯誤:List {i} .content = [List {i} .content temp',']; – kamaci

0

這個MATLAB中的最佳結構是細胞。單元格可以包含任何類型的一個對象,並且通常可以在數組中找到它們。像這樣的東西應該可以工作,並且非常理想(假設你不希望超過10K行);

output=cell(10000,1);  %This should be set to the maximum number of lines you ever expect to have 
output_names=cell(size(output)); 
output_used=false(size(output)); 
fid=fopen('filename.txt','r'); 
index=0; 
while ~feof(fid) 
    index=index+1; 
    line=fgets(fid); 
    splited_names=regexp(line,'\w*','split'); 
    output{index}=splited_names(2:end); 
    output_names{index}=splited_names(1); 
    output_used(index)=true; 
end 
output=output(output_used); 
output_names=output_names(output_used); 
相關問題