【问题标题】:How to write at the end of each line in file through Matlab?如何通过Matlab在文件的每一行末尾写?
【发布时间】:2016-02-25 10:37:25
【问题描述】:

假设我有矩阵 M

1 2 3 

4 5 6

7 8 9

我使用写入文件

dlmwrite( fullfile('C:\Users\xyz\Documents\MATLAB','test.txt'), M, 'delimiter', ' ', 'newline', 'pc');

我想创建一个新文件,该文件将在每行的末尾添加一个字符,例如

1 2 3 Z

4 5 6 Z

7 8 9 Z

注意:有 n 行和 3 列。如何在每行末尾添加 Z 作为第 4 列。

我该怎么做?谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    改用fprintf

    A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
    fid = fopen('file.txt', 'wt');
    for i = 1:3
        fprintf(fid, '%d %d %d Z\n', A(i,1), A(i,2), A(i,3));
    end
    

    【讨论】:

    • 如果我已经有一个包含 n 行和 3 列数据的文件,并且我想在每行中添加第 4 列,那么当文件中已有 3 列的数据时,是否有可能?跨度>
    • 您必须读取该文件中的数据,然后将其重写到一个新文件,并在每一行附加新字符。
    【解决方案2】:

    如果您想首先将现有数据读入M,您将需要使用textscan

    filename = 'input.txt';
    
    fid = fopen(filename, 'rb');
    M = textscan(fid, '%d %d %d');
    M = cat(2, M{:});
    fclose(fid);
    

    然后写出来,你会想要使用fprintf而不是dlmwrite,因为dlmwrite只适用于数字输入参数。

    fid = fopen(filename, 'wb');
    fprintf(fid, '%d %d %d Z\r\n', M');
    fclose(fid);
    

    这里的技巧是fprintf 接受输入直到你用完为止,因此您可以简单地将整个矩阵(使用转置运算符确保行主要排序)传递给@,而不是循环遍历M 的所有行987654331@,它会很乐意将数据写入文件,直到M中的数据用完。

    注意\r\n 的使用,这是您的 PC 换行所必需的。

    【讨论】:

    • 如果我已经有一个包含 n 行和 3 列数据的文件,并且我想在每行中添加第 4 列,那么当文件中已有 3 列的数据时,是否有可能?跨度>
    • 为此,您需要使用textscan 读入旧文件,然后在拥有M 后使用此方法写出新文件。
    • 如果这是您的问题,请更新您的问题。您的问题意味着您已经拥有M
    • @Leo 我的答案已更新为包括从文件中读取。
    • @Leo 是的。请尝试一下。
    猜你喜欢
    • 2014-02-04
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多