我有一份文件,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操作,但它不适用于数组。
发布于 2015-05-15 16:02:24
格式化的输出到REPL
@sprintf和循环可能是您想要的
假设test.dat包含以下内容:
A 1 11
AT 2 12
ARE 3 13
然后使用朱莉娅@printf宏(它的行为类似于C printf ),假设您需要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将输出到一个字符串,而不是STDOUT。您可以填充一个数组,然后编写整个字符串数组。
s = Array(String,0);
for i in 1:size(x,1) push!(s,@sprintf("%-3s %4.2f %10d",x[i,1],x[i,2],x[i,3])) end
writedlm("test2.dat",s);
Julia 0.4简化
在Julia0.4中,您可以在@printf中使用飞溅
for i in 1:size(x,1) push!(s,@sprintf("%-3s %4.2f %10d",x[i,:]...)) end
一衬垫
或者您可以使用map和do来理解更简洁但可读性更低的一行。
朱莉娅0.3
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);
朱莉娅0.4
writedlm("test2.dat",map([x[i,:] for i in 1:size(x,1)]) do y @sprintf("%-3s %4.2f %10d",y...) end);
https://stackoverflow.com/questions/30224335
复制相似问题