我正在尝试从txt文件导入所有double,该文件具有此格式
#25x1 string #9999x2 double . . . #(repeat ten times)
但是,当我尝试使用导入向导时,只有第一个
25x1 string 9999x2 double.
成功加载,其他9个被忽略
我如何导入所有数据? (importdata有最大长度还是什么?) 感谢
答案 0 :(得分:2)
这与最大长度无关,importdata
只是没有为您描述的数据文件类型设置。从帮助文件:
对于ASCII文件和电子表格,importdata需要 以矩形形式(即,像矩阵)查找数字数据。 文本标题可以显示在数字数据的上方或左侧, 如下:
上面文件顶部的列标题或文件描述文本 数字数据。数字数据左侧的行标题。
所发生的事情是,正在读取文件的第一部分,它与importdata
期望的格式相匹配,其余部分被忽略。而不是importdata
,您需要使用textscan
,尤其是这种风格:
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
作为选项)。