将单元格写入文本文件

时间:2016-01-19 19:28:00

标签: matlab text cell

我有一个39x4的细胞:

<select ng-options="user as user.name for user in users track by user.id" ng-model="default"></select>

我想将所有这些写入文本文件。我尝试过以下方法:

'ID'    'x' 'y' 'z'
459     34  -49 -20
464     36  -38 -22
639     40  -47 -27
719     35  -52 -20
725     42  -45 -18
727     46  -47 -26
...

但是,如果我这样做,我会收到错误,即fprintf未定义为&#39; cell&#39;输入。我已经看过几个这样的例子,关于如何print a cell array as .txt in Matlab关于如何write cell array of combined string and numerical input into text file的这个例子,但如果没有一些笨重的修改,它们似乎并不适合。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您的错误是由于您的单元格数组的第一行仅包含字符串而其他行仅包含数字。您的格式说明符当前假定每行写入的第一个元素是字符串,而其他元素是整数。您必须适应一种特殊情况,即写入第一行只包含字符串。

这样的事情应该有效:

%// Open the file for writing
fileID = fopen('test2.txt','w');

%// First write the headers to file
fprintf(fileID, '%s %s %s %s\n', P{1,:});

%// Transpose because writing is done in column-major order
Pt = P.'; %'

%// Now write each row to file
fprintf(fileID, '%d %d %d %d\n', Pt{:,2:end});

%// Close the file
fclose(fileID);

请注意第一行的格式说明符由完全字符串组成,然后后面的行的格式说明符仅包含整数。另请注意,我需要转置单元格数组,因为使用fprintf自然地按列主顺序写矩阵,所以为了以行主要方式编写矩阵,转置是在打印之前需要,我们还需要访问数据列而不是行来容纳。

答案 1 :(得分:0)

错误很可能是由于代码中的以下行引起的:

fprintf(fileID,formatSpec,P{:}); % P{:} returns all the cells in P matrix

此外,您指定的formatSpec将不适用于您的所有行,因为第一行的格式不同。您将需要两次调用fprintf:

fprintf(fileID,'%s %s %s %s\n',P{1,:});
fprintf(fileID,'%d %d %d %d\n',P{2:end,:});