我有一些数据,包括我想将它们存储在csv文件中的字符串和数字。 作为函数输出的数字存储在1x20的数组中。 所以在csv文件中,我希望有21列!因此,csv文件中的第一列应该是字符串,接下来的20列具有1x20数组中的信息。 我怎么能这样做?
我使用这样的东西来制作一个1x21的单元格:
%str:string变量; arr:1x20数字数组
c = cell(1,21);
c {1,1} = str;
对于cnt = 2:21
c {1,cnt} = arr(1,cnt-1);
端
然后我尝试了下面link提供的代码:
fid = fopen('test.csv', 'w') ;
fprintf(fid, '%s,', c{1,1:end-1}) ;
fprintf(fid, '%s\n', c{1,end}) ;
fclose(fid) ;
dlmwrite('test.csv', c(2:end,:), '-append') ;
,但我无法在csv中看到确切的数据。例如,我有arr(1,1) = 1.0000
。但是csv文件中的第二列是空的!
有人可以帮我解决这个问题吗?
更新: 答案没有用:( 让我以不同的方式提出我的问题,并使其有点清楚。 我希望在我的csv文件中有一些类似下面的数据:
path, feat1, feat2, feat3, feat4
C:\mydata\First\,10,2.001,450,12
C:\mydata\Second\,11,4.41,250,11
C:\mydata\Third\,20,3.891,289,10
因此,每行数据在第一列中有一个字符串,在下面有4个数字。
这4个数字是函数作为数组的输出。因此成像str
是字符串,output
是4个数字的数组。所以,我想在下面的代码中添加一个部分,它可以将结果以我上面提到的格式存储到csv文件中。
path1 = "C:\mydata\First\";
path2 = "C:\mydata\Second\";
path3 = "C:\mydata\Third\";
output = [];
for i = 1:3
str = eval(sprintf("path%d",i));
output = myFunction(str); % output is an array of data
%%The code I need to add here to store the data in a csv file%%
end
我希望现在很清楚。提前谢谢。
答案 0 :(得分:2)
正如文件所述:
dlmwrite(filename,M,'-append') appends the data to the end of the existing file, filename.
这不是你想要的:你想要追加到每一行。所以在字符串之后添加所有值。 你可能需要做类似的事情:
for i = 1:20
fprintf(fid, '%s,');
dlmwrite('test.csv', c{2:end,:}, '-append');
end
fprintf
之后关闭该文件。你应该自己检查一下。 考虑使用一个简单的矩阵表示可以正常工作的值:
dlmwrite('test.csv', c(2:end,:), '-append');
只有在你想要(或结构)时才使用单元格作为String部分。
编辑:
好的,这是针对您的问题的经过测试的工作方法:
fid = fopen('testing.txt', 'w');
A = rand(4,3);
for i = 1:size(A,1)
String = sprintf('Line: %d', i);
fprintf(fid, sprintf('%s, %1.2f, %1.2f, %1.2f\n', String, A(i,:)));
end
fclose(fid);
如果你不想在矩阵A
中明确指定元素的数量,那么即使像这样的解决方案也适用于Matlab(因为它为每个元素重复?print
命令): / p>
fid = fopen('testing.txt', 'w');
A = rand(4,3);
for i = 1:size(A,1)
String = sprintf('Line: %d', i);
fprintf(fid, sprintf('%s,', String));
fprintf(fid, sprintf('%1.2f,', A(i,:)));
fprintf(fid, '\n');
end
fclose(fid);
我希望这能解决你的问题。
答案 1 :(得分:1)
如果要保存单元格的2:20
列,则需要使用常规括号,如下所示:
c(1,cnt)=arr(1,cnt-1);
对于编写具有混合数据类型的csv
文件,csvwrite
不起作用。请参阅 Thanushan Balakrishnan 评论。
答案 2 :(得分:1)
好的,我找到了解决方案:
path1 = "C:\mydata\First\";
path2 = "C:\mydata\Second\";
path3 = "C:\mydata\Third\";
output = [];
fid = fopen('test.csv', 'w') ;
for i = 1:3
str = eval(sprintf("path%d",i));
output = myFunction(str); % output is an array of data
%%The code I need to add here to store the data in a csv file%%
fprintf(fid, '\n%s,', str) ;
for cnt = 1:4
fprintf(fid, '%d,', output(1,cnt));
end
end
fclose(fid) ;