Julia 以可变间距打印列

Julia 以可变间距打印列,julia,Julia,我有一个文件test.dat: A 1.00 11 AT 2.00 12 ARE 3.00 13 如果我对第三列执行一些操作并将其写入文件 x=readdlm("test.dat") x[:,3]=x[:,3]*2 writedlm("test2.dat",x) A 1 22 AT 2 24 ARE 3 26 是否仍有获取此输出的方法 A 1.00 22 AT 2.00 2

我有一个文件test.dat:

A   1.00         11
AT  2.00         12
ARE 3.00         13
如果我对第三列执行一些操作并将其写入文件

x=readdlm("test.dat")    
x[:,3]=x[:,3]*2
writedlm("test2.dat",x)

A   1   22
AT  2   24
ARE 3   26
是否仍有获取此输出的方法

A   1.00         22
AT  2.00         24
ARE 3.00         26
我知道如何在其他数据上使用@printf进行类似操作,但它不适用于数组。

格式化输出到REPL @sprintf而循环可能就是您想要的

假设test.dat包含以下内容:

A 1 11
AT 2 12
ARE 3 13
然后使用julia@printf宏(其行为类似于Cprintf),假设需要2个小数位,总共4个空格,最后一列需要10个空格,下面的内容与您想要的内容类似

julia> x=readdlm("test.dat");
julia> x[:,3]=x[:,3]*2;
julia> for i in 1:size(x,1) @printf("%-3s %4.2f %10d\n",x[i,1],x[i,2],x[i,3]) end
A   1.00         22
AT  2.00         24
ARE 3.00         26
归档 稍加修饰,@sprintf将输出为字符串,而不是标准输出。您可以填充一个数组,然后写入整个字符串数组

Julia 0.4简化 在Julia 0.4中,可以在@printf

for i in 1:size(x,1) push!(s,@sprintf("%-3s %4.2f %10d",x[i,:]...)) end
一班轮 或者,您可以使用映射执行以及更简洁但可读性较差的理解

朱莉娅0.3 朱莉娅0.4
你能澄清一下你想在这里实现什么吗?是否希望浮点数用固定的小数表示?或者您希望列之间有一个非常特定的空格数?或者两者都有?最好是保持输入文件的所有格式(浮动和列之间的特定间距)。但如果一个问题问得太多,那么柱之间的具体间距就更重要了。。。同样,我可以做这种类型的事情
@printf(“%d,%d,%10d\n”,a[1],a[2],a[3])
,但据我所知,这只适用于1xN数组。这太棒了,谢谢。我没能弄明白。我想我必须回去使用两种或三种语言来完成我的工作(这就是我尝试Julia的全部原因)。我将阅读
map
@sprintf
。再次感谢:)
for i in 1:size(x,1) push!(s,@sprintf("%-3s %4.2f %10d",x[i,:]...)) end
writedlm("test2.dat",map([x[i,:] for i in 1:size(x,1)]) do y @sprintf("%-3s %4.2f %10d",y[1],y[2],y[3]) end);
writedlm("test2.dat",map([x[i,:] for i in 1:size(x,1)]) do y @sprintf("%-3s %4.2f %10d",y...) end);