0

私は Java 開発者で、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

および List (この例では 5 つの要素があります) であり、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

Java では非常に単純であることはわかっていますが、Matlab で実装する方法がわかりません。

PS:私がやっていることはそれです。人々のつぶやきを含むテキストファイルがあります。最初の単語は行のラベルで、他の単語はそのラベルに関連する対応する単語です。ラベルのリストと、各ラベルに関する単語を保持するリストの別のリストがあります。

4

2 に答える 2

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
于 2012-12-10T22:45:59.657 に答える
0

Matlab でこれに最適な構造は cell です。セルには、任意の型の 1 つのオブジェクトを含めることができ、通常は配列自体に含まれています。このようなものは機能するはずで、かなり最適です (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);
于 2012-12-11T02:16:40.757 に答える