添加一个双空格作为分隔符

Posted

技术标签:

【中文标题】添加一个双空格作为分隔符【英文标题】:Add a double space as a delimiter 【发布时间】:2015-11-11 00:55:40 【问题描述】:

我有大量大型文本文件需要重新格式化,以便 FEAT(一种 MRI 分析程序)可以读取它们。 FSL 读取带有双空格作为分隔符的文本文件。我一直在使用 matlab 向 txt 文件添加我需要的一行信息,我试图让它将结果数组导出为带有双空格分隔符的文本文件,但我不知道如何做。 dlmwrite 只允许将单个字符用作分隔符。

有什么想法吗?

【问题讨论】:

从这个问题中并不完全清楚发生了什么......您尝试写入双空格分隔文本文件的 MATLAB 中的确切数据类型是什么?你只需要输出一个真正的双精度矩阵吗? 所以我正在获取一个数字文本文件,使用 dlmread 将它们变成一个数字数组,然后修改数组并在修改后的数组上使用 dlmwrite 再次将其输出为 .txt 文件。我被卡住了,因为我不知道如何让 dlmwrite 输出双空格,但我刚刚意识到我可以使用逗号作为分隔符,然后 ctrl-f 用 txt 文件中的双空格替换所有逗号本身。 比我想象的要简单得多。 【参考方案1】:

您可以使用自己的 dlmwrite 版本。例如:

function my_dlmwrite(filename, m, delimiter_string, sigfigs)
if(~ischar(delimiter_string))
    error('delimiter string should be a string');
end
if(~isnumeric(m) || ~(isreal(m)))
    error('matrix should be a real matrix of doubles')
end
if(~isscalar(sigfigs))
    error('the number of significant figures to print should be a scalar');
end
if(sigfigs < 5)
    warning('do you really want fewer than 5 significant significant digits?');
end        

fid = fopen(filename ,'W');  %open for writing and dont flush for better performance

[n_rows, n_cols] = size(m);

for(i=1:n_rows)
    fprintf(fid, '%.*g', sigfigs, m(i, 1));        
    for(j=2:n_cols)
        fprintf(fid, '%s%.*g', delimiter_string, sigfigs, m(i, j));
    end
    fprintf(fid,'\n');
end

fclose(fid);

【讨论】:

以上是关于添加一个双空格作为分隔符的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中向 Int 添加千位分隔符

csv文件

逗号作为小数分隔符空格作为千​​位分隔符C# [重复]

批处理,如何在for 中的 delims 中设置空格和其他字符做分隔符

如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]

从 .txt 中提取以空格分隔的列并添加以保存在新数据框中