Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中导入数据时如何避免长txt文件重复段被忽略_Matlab - Fatal编程技术网

matlab中导入数据时如何避免长txt文件重复段被忽略

matlab中导入数据时如何避免长txt文件重复段被忽略,matlab,Matlab,我正在尝试从一个txt文件导入所有double,该文件具有以下表单 #25x1 string #9999x2 double . . . #(repeat ten times) #25x1串 #9999x2双 . . . #(重复十次) 但是,当我尝试使用导入向导时,只有第一个 25x1 string 9999x2 double. 25x1串 9999x2双倍。 已成功加载,其他9个被忽略 如何导入所有数据?(importdata是否具有最大长度或其他内容?) 谢谢这与最大长度无关,impor

我正在尝试从一个txt文件导入所有double,该文件具有以下表单

#25x1 string #9999x2 double . . . #(repeat ten times) #25x1串 #9999x2双 . . . #(重复十次) 但是,当我尝试使用导入向导时,只有第一个

25x1 string 9999x2 double. 25x1串 9999x2双倍。 已成功加载,其他9个被忽略

如何导入所有数据?(importdata是否具有最大长度或其他内容?)
谢谢

这与最大长度无关,
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');它现在可以工作了。再次感谢!