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

Matlab中的Txt导入,不同的行格式,matlab,matlab-load,mat-file,Matlab,Matlab Load,Mat File,我需要从txt文件导入变量。该文件有3个主要部分 包含一般信息的最初标题 B每个列中的标题变量 C每列中的数值数据 详情如下: Headlines - Headlines - Headlines - Headlines Headlines - Headlines - Headlines - Headlines # A | B C | D | # ----------+-------------------

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

包含一般信息的最初标题

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     |
问题是,最初的标题每次都在更改,因此我们无法在开始时声明特定数量的行以避免

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

我不能这样做数据=文本扫描FID,'%s%f%s%f%s%f%s%f','headlines',4

我只有两种不同的行格式

如何仅导入每行中的数字数据

请提供帮助

您可以逐行应用文本扫描,而不是将其作为一个整体应用于文件。例如,根据您给出的示例,假设您已经编写了一个函数,从顶行确定数据格式:

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);

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

buf=textreadfilename、%s、'delimiter'、'\n'


然后解析它。在这种情况下,通过查找首字母来检测数据行似乎很容易。

亲爱的Skipsh非常感谢您的回答。这是非常有益的,这是伟大的。我使用了这个命令,在为j1,1编写时,我提取了行号,然后使用:Data=textscanfid,'%s%f%s%f%s%f%s%f','headlines',j,我正在加载变量。谢谢