matlab中导入数据时如何避免长txt文件重复段被忽略
我正在尝试从一个txt文件导入所有double,该文件具有以下表单 #25x1 string #9999x2 double . . . #(repeat ten times) #25x1串 #9999x2双 . . . #(重复十次) 但是,当我尝试使用导入向导时,只有第一个 25x1 string 9999x2 double. 25x1串 9999x2双倍。 已成功加载,其他9个被忽略 如何导入所有数据?(importdata是否具有最大长度或其他内容?)matlab中导入数据时如何避免长txt文件重复段被忽略,matlab,Matlab,我正在尝试从一个txt文件导入所有double,该文件具有以下表单 #25x1 string #9999x2 double . . . #(repeat ten times) #25x1串 #9999x2双 . . . #(重复十次) 但是,当我尝试使用导入向导时,只有第一个 25x1 string 9999x2 double. 25x1串 9999x2双倍。 已成功加载,其他9个被忽略 如何导入所有数据?(importdata是否具有最大长度或其他内容?) 谢谢这与最大长度无关,impor
谢谢这与最大长度无关,
importdata
只是没有为您描述的数据文件类型设置。从帮助文件:
对于ASCII文件和电子表格,importdata需要
以矩形形式(即,类似于矩阵)查找数字数据。
文本标题可以出现在数字数据的上方或左侧,
详情如下:
列标题或文件顶部的文件描述文本,如上所示
数字数据。数字数据左侧的行标题
因此,正在读取文件的第一部分,该部分与importdata
期望的格式匹配,其余部分被忽略。您需要使用textscan
,而不是importdata
,尤其是以下样式:
C = textscan(fileID,formatSpec,N)
fileID
从fopen
返回formatspec
告诉textscan
期望得到什么,以及重复多少次。只要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
作为选项)。导入向导建议使用25x1(每行视为1),但是,当我使用textscan时,它会逐字而不是逐行获取。所以,不要读前25行。它获得了前25个单词并停下来读两遍。我怎么能告诉matlab不要那样做?谢谢,您需要一个格式字符串“%s”重复25次,在这种情况下,N=1(您可以使用repmat
,而不仅仅是将其写出来)。我将其更改为%read one string,25次C{N,1}=textscan(fileID,'%s',25,'Delimiter','\r');它现在可以工作了。再次感谢!