Matlab中的Txt导入,不同的行格式
我需要从txt文件导入变量。该文件有3个主要部分 包含一般信息的最初标题 B每个列中的标题变量 C每列中的数值数据 详情如下: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 | # ----------+-------------------
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,我正在加载变量。谢谢