我需要从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)
我只有两种不同类型的行格式
如何仅导入每行中的数值数据。
请帮助
答案 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);
然后解析它。在这种情况下,通过查找初始#。
来检测数据线似乎很容易