【问题标题】:How to keep formatting of a double array?如何保持双数组的格式?
【发布时间】:2012-07-28 14:06:59
【问题描述】:
2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000
2000    2000    2000       0       0       0       0       0       0       4       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       4       3       3       0       3       3    2000    2000
2000    2000    2000       0       4       4       9      44      31       4       0       0    2000    2000
2000    2000    2000       0       4       0      31     277     531      29       0       0    2000    2000
2000    2000    2000       0       0       4       7       0       3      10       0       3    2000    2000
2000    2000    2000       0       0       4       3       0       0       5       0       1    2000    2000
2000    2000    2000       0       0       0       0       0       0       3       1       1    2000    2000
2000    2000    2000       0       0       0       0       3       1       2       1       1    2000    2000
2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000  
2000    2000    2000       0       0       0       4       0       4       0       0       0    2000    2000
2000    2000    2000       0       0       5      27      21       6       0       3       3    2000    2000
2000    2000    2000       0       3      31     274     316      25       1       1       1    2000    2000 
2000    2000    2000       0       0       4       5       4       6       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       1       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       1       0       0       0    2000    2000
2000    2000    2000       0       0       0       1       0       0       0       0       0    2000    2000
2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       3       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       4       0       3       0       0       0    2000    2000
2000    2000    2000       0       0       3       3      64       6       0       3       0    2000    2000
2000    2000    2000       0       0       3     473     374      30       9       1       0    2000    2000
2000    2000    2000       0       4       3       4       2      10       3       2       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       1       1       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       1       1       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       2       1    2000    2000
2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       0       0       0       0    2000    2000
2000    2000    2000       0       0       0       3       0       3       0       0       0    2000    2000
2000    2000    2000       0       0       4      18      34       9       0       0       0    2000    2000
2000    2000    2000       0       0       6     251     344      17       2       0       0    2000    2000
2000    2000    2000       0       0       8       2       3       5       0       3       0    2000    2000
2000    2000    2000       0       0       0       0       0       4       0       2       0    2000    2000
2000    2000    2000       0       0       0       0       0       1       0       0       0    2000    2000
2000    2000    2000       0       0       0       0       0       1       0       0       0    2000    2000
2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000    2000

上面是我目前在 MatLab 中生成的表格,但是当我尝试保存它时,当我需要保持这种格式时,它只是将它粘在一个长字符串中。我也需要它们以这种格式用逗号分隔。

这是我试图用来保存它的代码的 sn-p。

new_fname = ['star_chip' '_' date '.txt'];
path1 = '\\pfile01thn\bbruffey$\My Documents\IDLtoMatlab\star_chips\';
fid = fopen([path1 new_fname], 'w');
fprintf(fid,'%d',star_block);
fclose(fid);

【问题讨论】:

  • 请注意,记事本因不显示所有格式而臭名昭著。您可能想尝试使用写字板打开它,而不是仔细检查格式。
  • 查看我的编辑。当重新复制/粘贴回写字板时,这看起来是正确的。
  • 有没有办法一次读取一行并以这种方式创建一个新矩阵?看来这是在我尝试复制的文件中完成的方式,该文件是在 IDL 中完成的。
  • @BenB.: 所以你后面的分隔符是逗号后跟 TAB 还是逗号后跟空格?
  • 逗号之间不一定有空格。每个逗号之间有 5 个字符位置。

标签: matlab file-io matrix floating-point number-formatting


【解决方案1】:

这是您可以玩的另一种可能性。这没有逗号,如果你真的想要它们,我会在以后尝试让它工作。

这是假设您要保存的矩阵名为 Afid 是您打开的要写入的文件的文件 ID。

fid = fopen('filename path here', 'w');
for n = 1:size(A,1)
    fprintf(fid, '%5d', A(n,:))
    fprintf(fid, '\r\n')
end

fprintf 命令中的%5d' 指定带符号整数数据类型的字段宽度为 5。如果你真的想的话,你可以用iu 替换ddi 是一样的。 u 只是未签名。如果您愿意,可以使用大量其他修饰符,只需查看帮助文件中的函数即可。

第二行fprintf 在记事本中查看时也将被使用。它添加了一个回车符和一个换行符,因此它将下一行向下颠倒,并且在记事本中也这样做(这需要回车符)。

希望对大家有所帮助!


一种有点混乱(如在另一个循环中, eww =P )的方式来获取我想到的逗号。

fid = fopen('filename path here', 'w');
for n = 1:size(A,1)
    for m = 1:size(A,2)
        fprintf(fid, '%5d', A(n,m));
        fprintf(fid, ',');
    end
    fprintf(fid, '\r\n');
end

我不太喜欢使用这条路线,但它确实可以完成工作。如果A 真的很大,那么您实际上就是在遍历它的每个元素。


这反映了雷神留下的评论:

fid = fopen('filename path here', 'w');
for n = 1:size(A,1)
    for m = 1:size(A,2)
        fprintf(fid, '%5d,', A(n,m));
    end
    fprintf(fid, '\r\n');
end

【讨论】:

  • 循环在 MatLab 中可能很严重,但这个工作完美(等待 10 秒完成也不错 =P)哈哈,再次感谢 Ben!
  • 不需要第二个fprintf,把逗号放在整数转换中,即'%5d,
【解决方案2】:

请改用dlmwrite 函数,如果您希望将其存储为 ASCII 表,请使用:

dlmwrite(new_fname, int64(star_block), '\t')

【讨论】:

  • 有没有办法将数字保留在我上面的符号中,而不是将它们转换为科学记数法?
  • 谷歌搜索并遇到this,这让我确信dlmwrite是一个更好的选择。
  • 我添加了我希望输出在记事本中打开时在 .txt 文件中的样子。
  • AFAIK Matlab 不直接支持以这种方式编写文件。最简单的方法可能是使用sed 进行后期处理(如果有的话)。可以在 Matlab 中使用双 for 循环来实现,类似于:[m, n] = size(star_block); for i=1:m; for j=1:n; fprintf ...
  • 查看我在问题下的评论。看来我需要逐行读取文件。每行有 78 个值,在分隔值的逗号之间有 5 个字符空格。并且在每一行的开头都有一个空格。
【解决方案3】:

你可能想看看

dlmwrite('output.txt', yourMatrix);

它是同谋:

yourMatrix = dlmread('input.txt')

当然,您可能还需要更多选项。输入help dlmwritedoc dlmwrite 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2015-10-25
    • 2023-01-11
    相关资源
    最近更新 更多