【发布时间】:2023-03-10 02:51:01
【问题描述】:
我正在尝试从具有这种形式的 txt 文件中导入所有双精度
#25x1 字符串 #9999x2 双 . . . #(重复十次)但是,当我尝试使用导入向导时,只有第一个
25x1 字符串 9999x2 双倍。已成功加载,其他 9 个被忽略
如何导入所有数据? (importdata 是否有最大长度?) 谢谢
【问题讨论】:
标签: matlab
我正在尝试从具有这种形式的 txt 文件中导入所有双精度
#25x1 字符串 #9999x2 双 . . . #(重复十次)但是,当我尝试使用导入向导时,只有第一个
25x1 字符串 9999x2 双倍。已成功加载,其他 9 个被忽略
如何导入所有数据? (importdata 是否有最大长度?) 谢谢
【问题讨论】:
标签: matlab
这与最大长度无关,importdata 只是没有为您描述的那种数据文件设置。从帮助文件中:
对于 ASCII 文件和电子表格,importdata 需要 以矩形形式(即,像矩阵)查找数值数据。 文本标题可以出现在数字数据的上方或左侧, 如下:
文件顶部的列标题或文件描述文本,上面 数值数据。数值数据左侧的行标题。
所以发生的情况是,文件的第一部分与importdata 期望的格式匹配,正在被读取,其余部分被忽略。你需要使用textscan,而不是importdata,尤其是这种风格:
C = textscan(fileID,formatSpec,N)
fileID 从fopen 返回。 formatspec 告诉 textscan 会发生什么,以及 N 重复它多少次。只要fileID 保持打开状态,对textscan 的重复调用就会继续从上次读取操作停止的地方读取文件——而不是回到文件的开头。所以我们可以这样做:
fileID = fopen('myfile.txt');
repeats = 10;
for n = 1:repeats
% read one string, 25 times
C{n,1} = textscan(fileID,'%s',25);
% read two floats, 9999 times
C{n,2} = textscan(fileID,'%f %f',9999);
end
然后您可以从元胞数组中提取您的数值数据(如果您需要它在一个块中,您可能想尝试使用'CollectOutput',1 作为选项)。
【讨论】: