我知道这是一个经常性的话题,我已经尝试了解人们提供的答案,但是没有一个似乎很容易转移到我的特定问题,因为解决方案通常是为了一个离我的方式太远的实现试图做
任何人都可以提供以下帮助。
当我运行下面的代码时,我得到:
Error using dlmwrite (line 118)
The input cell array cannot be converted to a matrix.
Error in GAVNeuroScan (line 25)
dlmwrite(outputfile, CondRowDone);
我举一个例子来说明我想在代码末尾的评论中实现的目标。
如果有人可以帮助我将CondRowDone
的内容提供给文本文件,如评论中所示,那就太棒了!
studyname='TestGav';
subjects={'504','505'};
conditions={'HighLabel','LowLabel','HighSound','LowSound'};
nCond=4;
GFPorBMR='GFP';
for curCond=1:length(conditions)
for curSubject=1:length(subjects)
gavRow{curSubject}=[subjects(curSubject) '-' conditions{curCond} '-' GFPorBMR '.avg'];
end
CondRowDone{curCond,:}=['GROUPAVG' '{' gavRow '}' 'G Y 1 N N' conditions{curCond} 'avg.'];
end
outputfile = [studyname '_GAV_' curSubject '.txt'];
dlmwrite(outputfile, CondRowDone);
% What I want is a text file that would look exactly like that. I think I'm
% not far but it fails to write...
%
% GROUPAVG {{HighLabel-504-GFP.avg} {HighLabel-505-GFP.avg}} G Y 1 N N {HighLabel.avg}
% GROUPAVG {{LowLabel-504-GFP.avg} {LowLabel-505-GFP.avg}} G Y 1 N N {LowLabel.avg}
% GROUPAVG {{HighSound-504-GFP.avg} {HighSound-505-GFP.avg}} G Y 1 N N {HighSound.avg}
% GROUPAVG {{LowSound-504-GFP.avg} {LowSound-505-GFP.avg}} G Y 1 N N {LowSound.avg}
答案 0 :(得分:1)
从我看到的使用调试器的情况来看,你在花括号作为文本和花括号来处理MATLAB单元数组时会有一些混淆。
这是对for
- 循环的重写,以生成您在代码示例中给出的字符串的单元格数组。此外,要生成您指定的确切输出,主题和条件必须以不同的顺序给出:
for curCond=1:length(conditions)
gavRow = [];
for curSubject=1:length(subjects)
if (curSubject ~= 1)
gavRow = [gavRow ' '];
end
gavRow = [gavRow '{' [conditions{curCond} '-' subjects{curSubject} '-' GFPorBMR '.avg'] '}'];
end
CondRowDone{curCond}=['GROUPAVG ' '{' gavRow '} ' 'G Y 1 N N {' conditions{curCond} '.avg}'];
end
至于将字符串写入磁盘的任务,MATLAB告诉您它无法将您的单元格数组作为矩阵处理。在将单元阵列写入磁盘时,我认为你必须自己使用低级函数编写它,如下所示:
outputfile = [studyname '_GAV_' curSubject '.txt'];
fid = fopen(outputfile, 'w');
for i=1:length(CondRowDone)
fprintf(fid, '%s\n', CondRowDone{i});
end
fclose(fid);
答案 1 :(得分:0)
dlmwrite
仅处理数字数据。解决这个问题的一种方法,如果你有Excel,就是使用xlswrite
- 它可以直接接收(某些类型的)单元格数组。
xlswrite(outputfile, CondRowDone);
然后,执行一些批量xls到csv转换(例如,请参阅this question和答案)。要直接获取文本文件,您需要使用较低级别的命令(如blackbird的答案)。