如何使用 TCL 将值添加到 csv 文件并在值中的字符数小于 8 时添加 space
how to add values to csv file using TCL and add space if the number of characters in a value is less than 8
我正在寻找一个TCL命令将数据写入csv文件,在添加数据的同时,如果每个值的字符数小于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个字符。
456784567845678456784567845678456784567845678
Axis10 101 2887.9 853.87 2172.0 2956.9 925.52502181.8
+ 2890.5 864.9 2072.6
4567845678456784567845678456784567845678
要么使用制表符作为分隔符,要么使用固定的字段输出。
作为分隔符的制表符
如果您使用 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]
根据 Donal 的回答,这里有一个(可能过度设计的)方法:
假设你已经有了这个
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
我正在寻找一个TCL命令将数据写入csv文件,在添加数据的同时,如果每个值的字符数小于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个字符。
456784567845678456784567845678456784567845678
Axis10 101 2887.9 853.87 2172.0 2956.9 925.52502181.8
+ 2890.5 864.9 2072.6
4567845678456784567845678456784567845678
要么使用制表符作为分隔符,要么使用固定的字段输出。
作为分隔符的制表符
如果您使用 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]
根据 Donal 的回答,这里有一个(可能过度设计的)方法:
假设你已经有了这个
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