1

我需要从 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     |

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

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

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

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

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

请帮忙

4

2 回答 2

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);
于 2013-07-23T19:59:56.177 回答
0

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

buf=textread(文件名,'%s','分隔符','\n');

然后解析它。在这种情况下,通过查找初始 # 来检测数据线似乎很容易。

于 2013-07-23T23:08:54.127 回答