2012-12-10 1 views
0

저는 Java 개발자이자 MATLAB을 처음 사용합니다.Matlab Reading 문자열 목록에서 텍스트 파일 목록 표시

Label Array: 
Label_X 
Label_Y 
Label_X 
Label_X 
Label_Y 

및 목록 (우리의 예를 들어 다섯 개 가지 요소가 있습니다) : 레이블을 포함

벡터 (배열) :

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 

내가 원하는 것은 : 나는 그런 파일 뭔가를 list의 모든 요소에는 구분 된 문자열의 요소 크기가 있습니다. 내 말은

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 

나는 자바에서 꽤 간단하지만 나는 Matlab에서 그것을 구현하는 방법을 모른다.

추 신 : 내가하는 것은 그것입니다. 사람들의 트윗을 포함하는 텍스트 파일이 있습니다. 첫 번째 단어는 행의 레이블이고 다른 단어는 해당 레이블과 관련된 단어입니다. 레이블 목록과 각 레이블에 대한 단어가 들어있는 목록 목록이 있습니다.

답변

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);