Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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分离文本文件的行。例如,第一组中的前1-3行(模式),第二组中的下1-3行,等等_Matlab_File Io - Fatal编程技术网

如何使用MATLAB分离文本文件的行。例如,第一组中的前1-3行(模式),第二组中的下1-3行,等等

如何使用MATLAB分离文本文件的行。例如,第一组中的前1-3行(模式),第二组中的下1-3行,等等,matlab,file-io,Matlab,File Io,我想用MATLAB将以下文本文件的各个部分分开:如第一组中的前1-3(模式),第二组中的下1-3,等等 编辑:自首次发布后,文件格式已被编辑 (modes) (-x) (y) 1 -4177 3764 2 -4177 3763 2 -4177 3760 2 -4173 3758 2 -4171 3757 2 -4170 3758 2 -4171 3754 2 -4176 3749 2 -4176 3752 2 -4179 3758 2 -4182 3769 2 -4195 3785 2 -42

我想用MATLAB将以下文本文件的各个部分分开:如第一组中的前1-3(模式),第二组中的下1-3,等等

编辑:自首次发布后,文件格式已被编辑

(modes) (-x) (y) 1 -4177 3764 2 -4177 3763 2 -4177 3760 2 -4173 3758 2 -4171 3757 2 -4170 3758 2 -4171 3754 2 -4176 3749 2 -4176 3752 2 -4179 3758 2 -4182 3769 2 -4195 3785 2 -4221 3803 2 -4251 3833 2 -4276 3866 2 -4302 3899 2 -4321 3926 2 -4341 3949 2 -4360 3961 2 -4375 3965 2 -4384 3965 2 -4389 3962 2 -4386 3959 2 -4389 3958 2 -4390 3956 2 -4390 3958 2 -4387 3962 2 -4392 3965 2 -4381 3955 3 -12851 -12851 1 -4396 3779 2 -4396 3778 2 -4398 3775 2 -4396 3775 2 -4396 3778 2 -4393 3787 2 -4387 3796 2 -4371 3808 2 -4338 3832 2 -4297 3866 2 -4257 3902 2 -4225 3934 2 -4207 3950 2 -4195 3959 2 -4192 3959 2 -4189 3956 2 -4189 3955 2 -4192 3949 2 -4188 3949 2 -4183 3949 2 -4183 3949 3 -12851 -12851 (模式)(-x)(y) 1 -4177 3764 2 -4177 3763 2 -4177 3760 2 -4173 3758 2 -4171 3757 2 -4170 3758 2 -4171 3754 2 -4176 3749 2 -4176 3752 2 -4179 3758 2 -4182 3769 2 -4195 3785 2 -4221 3803 2 -4251 3833 2 -4276 3866 2 -4302 3899 2 -4321 3926 2 -4341 3949 2 -4360 3961 2 -4375 3965 2 -4384 3965 2 -4389 3962 2 -4386 3959 2 -4389 3958 2 -4390 3956 2 -4390 3958 2 -4387 3962 2 -4392 3965 2 -4381 3955 3 -12851 -12851 1 -4396 3779 2 -4396 3778 2 -4398 3775 2 -4396 3775 2 -4396 3778 2 -4393 3787 2 -4387 3796 2 -4371 3808 2 -4338 3832 2 -4297 3866 2 -4257 3902 2 -4225 3934 2 -4207 3950 2 -4195 3959 2 -4192 3959 2 -4189 3956 2 -4189 3955 2 -4192 3949 2 -4188 3949 2 -4183 3949 2 -4183 3949 3 -12851 -12851 我该怎么做呢


谢谢。

回答该格式的原始文本文件

1-41773764

2-41773763

2-41773760

2-41733758

2-41713757

假设您的文件名为“text.txt”,位于驱动器C上,请执行以下操作:

 [col1, col2, col3] = textread('C:\text.txt', '%d %d %d');
文本文件中的所有条目都将位于相应的变量col1、col2和col3中

编辑:

cells = cell(1, numel(col1));
for j = 1 : numel(col1)
   cells{j} = [col1(j) col2(j) col3(j)];
end
这将对您的值进行如下分组:

  • 单元格{1}:1-41773764

  • 单元格{2}:2-41773763


下面是使用该函数的示例代码。它读取文件,然后使用分隔符每隔3行分隔一行,并将结果放入单元格数组中

请注意,在本例中,您有52行数据(加上忽略的一行标题),这些数据不能被3整除,因此最后一个条目只有一行

%# read file
fid = fopen('file.dat','r');
C = textscan(fid, '%f %f %f', ...
    'Delimiter',' ', 'HeaderLines',1, 'CollectOutput',true);
fclose(fid);
C = C{1};

%# handles the case where number of lines is not divisible by 3
n = fix(size(C,1)/3)*3;
CC = mat2cell(C(1:n,:), repmat(3,1,n/3), size(C,2));
CC{end+1} = C(n+1:end,:);
结果是:

>> whos CC
  Name       Size            Bytes  Class    Attributes

  CC        18x1              2328  cell               
最后两个单元格:

>> CC{end-1}
ans =
           2       -4188        3949
           2       -4183        3949
           2       -4183        3949
>> CC{end}
ans =
           3      -12851      -12851

在什么基础上分离它们?只需使用
load
load(文件名)。在我提交您原始问题的答案后,您已更改了文本文件的内容。请在您的问题中指出您已更改了文件格式。您的三个示例组都是相同的,我不知道我们如何才能知道您希望如何对数字进行分组。textscan函数对于从文件解析此类数据也非常有用。@memyself:我的理解是,OP希望在一个组中每三行分隔一次,而不是每三个值分隔一次。。。还是我完全错了?@Amro我不知道他想要什么,这就是我添加示例的原因。我刚刚将代码添加到我理解它的方式中。一旦他给了我们一个他希望输出如何分组的例子,我们就可以修改我们的条目了。