我是一名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
我想要的是:
vector(数组)包含标签:
Label Array:
Label_X
Label_Y
Label_X
Label_X
Label_Y
和一个List(我们的例子有五个元素),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:我在做什么。我有一个包含人物推文的文本文件。第一个单词是行标签,其他单词是与该标签相关的对应单词。我将有一个标签列表和另一个列表,列出每个标签的文字。
答案 0 :(得分: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
答案 1 :(得分: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);