2

我正在尝试读取 ';' 的 .txt 文件 在“标题”和“标题”之后的不同列中用日期分隔。我在 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
...]

我已经尝试过 textscan、cvsread、textread 并且没有任何效果!

提前致谢!

编辑:实际上,我找到了一个更快的代码来做到这一点!

4

1 回答 1

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
于 2013-07-15T16:12:31.993 回答