在Matlab中导入Txt,不同的行格式

时间:2013-07-23 14:52:13

标签: matlab matlab-load mat-file

我需要从txt文件中导入变量。该文件有3个主要部分。

A)初始标题,包含一般信息

B)每个栏目中的标题 - 变量

C)每列中的数字数据

如下:

Headlines - Headlines - Headlines - Headlines
Headlines - Headlines - Headlines - Headlines


#    A      |      B              C      |      D        | 
# ----------+----------------------------+---------------|  
#    1      |  0.0000E+00  +  0.0000E+00 |    0.0000     |
#    2/3    |  0.0000E+00 +/- 0.0000E+00 |    0.0000     |
#    4/5    |  0.0000E+00 +/- 0.0000E+00 |    0.0000     |
#    6      |  0.0000E+00  +  0.0000E+00 |    0.0000     |

问题是初始标题每次都在变化,所以我们最初不能声明特定的行数以避免。

如您所见,我们有两种不同的行格式。所以我们不能为每一行写一个特定的格式,每一列中的数值数据也在变化。

我不能这样做(Data = textscan(fid,'%s%f%s%f%s%f%s%f','headlines',4)

我只有两种不同类型的行格式

如何仅导入每行中的数值数据。

请帮助

2 个答案:

答案 0 :(得分:0)

您可以逐行应用textscan而不是整个文件。例如,根据您给出的示例(假设您已经编写了一个函数来确定顶行的数据格式):

fileID = fopen(fileName);
blockLine = 0;
while ~feof(fileID)
    currLine = fgetl(fileID);
    % Check if we've reached the datablock
    if strcmpi(currLine(1),'#')
       blockLine = blockLine + 1;
    end
    % Use first line of datablock to determine textscan format
    if blockLine == 1
        textFormat = [insert format determination function];
    elseif blockLine > 2
        % Ignoring second line (dashes only)
        lineData = textscan(currLine,textFormat);
        [insert code to distribute data to larger variables]
    end
end
fclose(fileID);

答案 1 :(得分:0)

我最喜欢的方法是使用这个神奇的命令读入整个文件:

  

BUF = textread(文件名,'%S''分隔符'' \ n&#39);

然后解析它。在这种情况下,通过查找初始#。

来检测数据线似乎很容易