我正在尝试读取一个'。'文件,即';'在'标题'和'标题'之后的不同列中用日期分隔。我正在使用HEADER的引号,因为它更像是参数行。
因此,.txt就像(其他行具有相同的列数):
15/07/2013;66;157
DDD;3;1;0;1;1;1;-0.565
DDD;8;2;0;2;1;1;-0.345
DDD;9;3;2;3;1;2;-0.643
DDD;8;1;3;5;1;3;-0.025
DDD;8;1;0;9;1;4;-0.411
DDD;15;1;5;4;1;5;-0.09
DDD;12;1;0;5;1;6;-0.445
DDD;13;1;0;7;1;7;-0.064
我想阅读并创建一个矩阵,其中包含一个单元格中的每个数据,如:
matrix =
[15/07/2013 66 157
DDD 3 1 0 1 1 1 -0,565
DDD 8 2 0 2 1 1 -0,345
DDD 9 3 2 3 1 2 -0,643
...]
我尝试过textcan,cvsread,textread,没有任何作用!
提前致谢!
编辑:实际上,我发现了一个WAY FASTER代码来做到这一点!
答案 0 :(得分:2)
根据我过去的经验,MATLAB不喜欢字符串和数字在同一个矩阵中,因此您将被迫使用单元格。
通过简单的配对,您可以相对轻松地完成此操作。
fid = fopen('temp.txt','r'); %# open file for reading
count = 1;
content = {};
while ~feof(fid)
line = strtrim(fgets(fid)); %# read line by line
parts = regexp(line,';','split');
for i = 1:numel(parts)
temp = regexp(parts{i},'-?[0-9]*\.?[0-9]*(i|j)?','match');
if numel(temp) >= 1 && strcmpi(temp{1},parts{i})
parts{i} = str2double(parts{i}) ;
end
end
content{count} = parts;
count = count + 1;
end
fclose(fid);
numRows = size(content,2)-1;
whole = cell(numRows,8);
for i = 1:numRows
for j = 1:8
whole{i,j} = content{i+1}{j};
end
end
content = {content{1},whole};
更新
我添加了一些东西将所有内容放入单个单元格数组中,所有数据都在标题之外。我不知道你是否将标题也放在那个8列数组中,但如果你这里做的是一些代码来做那个
numRows = size(content,2);
whole = cell(numRows,8);
for i = 1:numRows
for j = 1:min([size(content{i},2),8])
whole{i,j} = content{i}{j};
end
end
whole