如何使用TCL向csv文件添加值,并在值中的字符数小于8时添加空格



我正在寻找一个将数据写入csv文件的TCL命令,在添加数据的同时,如果每个值中的字符数小于8 ,我需要添加空格

以下是我需要使用TCL命令在csv文件的一行中添加的变量的示例列表

Name = Axis10
Id = 101
A1 = 2887.9
A2 = 853.87   
A3 =2172.0
B1 =2956.9
B2 = 925.5250
B3 = 2181.8
C1 =2890.5
C2 =864.9
C3 =2072.6

以下是我在CSV文件中需要的行的最终格式。(第一行和最后一行仅供参考,用于计数8个字符。

$2345678$2345678$2345678$2345678$2345678$2345678$2345678$2345678$2345678
Axis10  101             2887.9  853.87  2172.0  2956.9  925.52502181.8
+       2890.5  864.9   2072.6
$2345678$2345678$2345678$2345678$2345678$2345678$2345678$2345678

使用制表符作为分隔符,或者使用fixed with字段输出。

选项卡作为分隔符

如果使用csv::join生成输出行,只需将可选的sepChar参数指定为t:

set line [csv::join $data "t"]

固定宽度输出

在这种情况下,您根本没有真正生成CSV。format命令是理想的

set data {Axis10 2887.9 853.87 2172.0}
set line [format "%8s%8s%8s%8s" {*}$data]

根据多纳尔的回答,以下是一种(可能是过度设计的(方法:

假设你已经有了

set Name Axis10
set Id 101
set A1 2887.9
set A2 853.87   
set A3 2172.0
set B1 2956.9
set B2 925.5250
set B3 2181.8
set C1 2890.5
set C2 864.9
set C3 2072.6

然后

proc numberedFields {letter} {
lmap n {1 2 3} {
uplevel "set $letter$n"
}
}
proc f {value} {format %-8s $value}
proc line {values} {join [lmap val $values {f $val}] ""}
puts [line [list $Name $Id "" {*}[numberedFields A] {*}[numberedFields B]]]
puts [line [list "+" {*}[numberedFields C]]]

输出

Axis10  101             2887.9  853.87  2172.0  2956.9  925.52502181.8
+       2890.5  864.9   2072.6

最新更新