【问题标题】:MATLAB Creating a .txt file containing numbers and strings from a cellMATLAB 创建一个包含来自单元格的数字和字符串的 .txt 文件
【发布时间】:2012-11-17 00:36:51
【问题描述】:

亲爱的stackoverflowers,

我想使用 matlab 创建一个 .txt 文件。 内容应该用制表符分隔。 它应该有 3 列,并且第 3 列应该用元胞数组中的字符串填充。 比方说

A=[2; 3; 3;];
B=2*A;
C=cell(3,1);
C{1,1}='string1'; C{2,1}='string2'; C{3,1}='string3';

最后应该是这样的:

    2  4  string1
    3  6  string2
    3  6  string3

我已经找到了,如何将 2 个矩阵放入一个文本文件中: dlmwrite('filename.txt', [A B], '分隔符', '\t')

但是如何追加单元格的内容呢? 最好只在文件中包含字符串,而不是单引号。 我没有在其他地方找到解决方案,也没有在其他地方问过这个问题。 我很欣赏各种建议。

【问题讨论】:

标签: matlab


【解决方案1】:

尝试以下方法:

% Open a file for writing (if you want to append to file use 'a' instead of 'w')
fid = fopen(file,'w');

for i = 1:size(A,1)
    fprintf(fid,'%d  %d  %s\n',A(i),B(i),C{i})
end

fclose(fid)

希望对你有帮助

【讨论】:

    【解决方案2】:

    关于 dlmwrite 的文档说明:

    备注

    生成的文件可由电子表格程序读取。

    dlmwrite 函数不接受输入矩阵的元胞数组 M. 要导出仅包含数值数据的元胞数组,请使用 cell2mat 在调用 csvwrite 之前将元胞数组转换为数值矩阵。

    导出具有混合字母和数字的元胞数组 数据,其中每个单元格包含一个元素,您可以创建一个 使用 xlswrite 的 Excel 电子表格(如果您的系统安装了 Excel)。 对于所有其他情况,您必须使用低级导出函数来编写 你的数据。

    所以要么你把它写成 Excel 电子表格,要么用你自己写的转换函数。

    例如

    A=[2; 3; 3;];
    B=2*A;
    C=cell(3,1);
    C{1,1}='string1'; C{2,1}='string2'; C{3,1}='string3';
    
    % First solution
    f = fopen('filename.txt', 'w');
    for n = 1:3
        fprintf(f, '%d\t%d\t%s\n', A(n), B(n), C{n});
    end
    fclose(f);
    
    % Another solution
    % create the table as a single cell array with only strings
    C2 = [arrayfun(@num2str, [A, B], 'UniformOutput', false) C]'; % <- note the transpose
    
    f = fopen('filename.txt', 'w');
    fprintf(f, '%s\t%s\t%s\n', C2{:}); % <- every three entries are written as a line
    fclose(f);
    

    【讨论】:

    • 谢谢!目前我不想将其导出为电子表格,但我将来可能会这样做。
    • @user1830121 好的,但我发布的代码向您展示了两种将其编写为制表符分隔的文本文件而不是电子表格的方式。我看到您已经接受了 Schifini 的答案,但请注意,该答案的输出不是按您的要求用制表符分隔的,而是用空格分隔的。此外,该答案使用了变量i,这可能会破坏 Matlab 中的其他代码,因为它使用的是虚数。
    • 亲爱的catchmeifyoutry,我最初标记了其他解决方案,因为我认为其他用户看起来也更容易。同时,我用我的真实数据集尝试了这两个建议,我发现你的第二个解决方案效果最好!如果我使用第一个,我会以某种方式收到此警告: %s 格式说明符的参数必须是 char 类型(字符串),如果我使用第二个(当然在同一个单元格上),我不会得到)。但是,我认为这个问题对我来说已经解决了,非常感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多