困难在一个循环中使用“readvars”函数的不同维度的数据文件

2视图(30天)
你好,我想初始化一个单元阵列,通过将每个单元分配给readvars的输出。我有几个不同的文本文件的行数不同,但它们都有5列。
我的代码是这样的:
块=单元(13);
脉冲=单元(13);
raw_tofs =单元(13);
指数= 1:1:13
this_pulse [this_chunk, ~, ~, this_raw_tofs] = readvars (“filename_dependent_on”+ num2str(指数));
块{指数}= this_chunk;
脉冲{指数}= this_pulse;
raw_tofs{指数}= this_raw_tofs;
结束
或者我也试着改变在for循环:
[块{指数},~,脉冲{指数},~,raw_tofs{指数}]= readvars (“filename_dependent_on”+ num2str(指数));
但是这两个给一个矩阵维度必须同意的错误。我也试过清算this_chunk的内容,this_pulse, this_raw_tofs通过设置之前= []readvars线。
我不知道如何使这项工作…
,很明显,这个循环没问题如果我13次循环任何一个文件。显然与数据点的数量在每个文件是不同的,但我不能找到一个方法来分配在那种情况下在一个循环中。
非常感谢您的帮助!谢谢你!
1评论
马克斯Alger-Meyer
马克斯Alger-Meyer 2022年3月7日
的很难调试没有示例文件,但有一件事你可能尝试打破线分成三个独立的函数调用。
指数= 1:1:13
[this_chunk, ~, ~, ~, ~] = readvars (“filename_dependent_on”+ num2str(指数));
[this_pulse ~, ~, ~, ~] = readvars (“filename_dependent_on”+ num2str(指数));
[~,~,~,~,this_raw_tofs] = readvars (“filename_dependent_on”+ num2str(指数));
块{指数}= this_chunk;
脉冲{指数}= this_pulse;
raw_tofs{指数}= this_raw_tofs;
结束
这只是一个猜测我看不到没有文件调试,实际发生了什么但我的猜测是,它不喜欢不同长度的向量,输出实例的代码只适用于文件中有相同数量的行。

登录置评。

接受的答案

沃斯
沃斯 2022年3月8日
编辑:沃斯 2022年3月8日
我无法重现这个错误 readvars 本身,但我可以生成,错误在相同的行 readvars 使用。
我意识到“ “filename_dependent_on”+ num2str(指数) “是占位符代码代表的实际代码,但是以防您使用类似的语法,也就是说,使用 + ( + )与特征向量输入,当会发生错误 num2str(索引) 有多个数字。
指数= 1;
disp (“filename_dependent_on”+ num2str(指数))%没有问题
151 154 157 150 159 146 158 150 144 149 150 161 150 159 149 150 159 165 144 160 159
指数= 10;
试一试
disp (“filename_dependent_on”+ num2str(指数))%的错误发生
disp (ME.message);%显示错误消息(并继续运行下面的代码)
结束
数组已经为这个操作不兼容的大小。
(我的MATLAB版本给你报告的错误消息,“矩阵维度必须同意。”)
原因在于, + 把特征向量等数值向量,所以添加这些特征向量在一起,不执行字符串连接,这可能是你使用 + (做字符串连接字符串而不是字符向量)。就像数字数组,当添加两个特征向量时,您可以添加一个向量和一个标量,但添加两个向量需要兼容的维度。
“一个”+ 1%添加一个特征向量a和1号
ans = 66
char (“一个”+ 1)%显示相应的字符的结果
ans =“B”
char (“文件名”+“~”)%添加两个特征向量(一个是一个标量-好吧)
ans =“aceaißea”
char (“文件名”+“文件名”)%添加相同大小的两个特征向量:好的
ans =“IOØEUAUE”
char (“文件名”+“十”)%尝试添加incompatibly-sized特征向量——错误
数组已经为这个操作不兼容的大小。
我的猜测是,尽快 指数 有超过一位呢 num2str(索引) 种基本得到错误,试图构建文件名字,吗 readvars 实际上是调用。(这可能是符合你的观察,它工作正常循环13倍,也许任何一个文件 指数 不是在这种情况下使用?)
如果这是错误的原因,你可以修理它通过构造文件名使用方括号,例如,
(“filename_dependent_on”num2str(指数)
如果这不是是什么引起的误差,请上传一些文件 readvars 似乎有一个问题。
3评论
沃斯
沃斯 2022年3月8日
@Mackenzie Peter-Fulford Van Rossem 我很高兴现在的工作!
@Stephen 指出的那样,你可以完全避免连接无论您使用的是字符串或字符向量,通过使用 sprintf () ,如
sprintf (“filename_dependent_on % d '、索引)

登录置评。

更多的答案(0)

下载188bet金宝搏


释放

R2019a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!