String 如果值中的字符数小于8,如何使用TCL向csv文件添加值并添加空间

String 如果值中的字符数小于8,如何使用TCL向csv文件添加值并添加空间,string,tcl,String,Tcl,我正在寻找一个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文件中需要的行的最终格式。(第一行和最后一行仅用于计

我正在寻找一个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个字符的参考。)

$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 field output

制表符作为分隔符 如果使用生成输出行,只需将可选的sepChar参数指定为
\t

set line [csv::join $data "\t"]
固定宽度输出 在这种情况下,您根本没有真正生成CSV。该命令非常适合于此

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
然后

输出

Axis10 101 2887.9 853.87 2172.0 2956.9 925.52502181.8
+       2890.5  864.9   2072.6

您的CSV输出中逗号在哪里?并且您的变量示例列表不在tcl代码中…看起来您的输出格式是固定宽度字段,而不是CSV,在这种情况下会很有用。是的,CSV文件需要输入到一个应用程序中,该应用程序将不识别逗号,并根据固定宽度字段,因此它不是逗号分隔的值文件。。。
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]]]