将输出写入不同列中的 excel
writing output to a excel in different column
您好,我正在使用 tcl 编写输出 xls 文件。
然而,我成功地将输出写入一列中的 xls 文件,但我想同时拆分并写入两个不同的列。
我的代码只写入一列,工作正常:
set fh [open $e w]
while {[llength $c]} {
set name [lindex $c 0]
set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
set filesofDirectory [glob -nocomplain -directory $name -type f *]
if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
set x "number of files in $name is [llength $filesofDirectory]"
puts $fh [join $x ]
}
}
close $fh
然而,当我修改相同的代码以获得输出时:
set fh [open $e w]
while {[llength $c]} {
set name [lindex $c 0]
set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
set filesofDirectory [glob -nocomplain -directory $name -type f *]
if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
set x "number of files in $name"
set y [llength $filesofDirectory]
puts $fh [join $x "," $y]
}
}
close $fh
请提出解决方法
要将目录分解转储到可在 Excel 中使用的 CSV 文件中,此代码应该有效:
package require csv
set c .
set d fftc
set e foo.csv
proc glob2csv {c d fh} {
foreach name $c {
if {[file isdirectory $name]} {
set n [llength [glob -nocomplain -directory $name -type f *]]
if {$n > 0 && $d eq "fftc"} {
chan puts $fh [csv::join [list "number of files in $name is" $n]]
}
glob2csv [glob -nocomplain -directory $name -type d *] $d $fh
}
}
}
try {
open $e w
} on ok fh {
glob2csv $c $d $fh
} finally {
catch {chan close $fh}
}
我在这里做了很多令人不安的假设,因为我真的不知道你的代码是关于什么的。您可能希望使用 csv::join
的可选参数来调整 CSV 文件的格式。例如,在我的语言环境中,我需要将分隔符设置为制表符 (\t
) 以避免 Excel 将每一行都视为一个字符串。
的文档
文档:catch, chan, file, foreach, glob, if, list, llength, open, package, proc, set, try
您好,我正在使用 tcl 编写输出 xls 文件。 然而,我成功地将输出写入一列中的 xls 文件,但我想同时拆分并写入两个不同的列。 我的代码只写入一列,工作正常:
set fh [open $e w]
while {[llength $c]} {
set name [lindex $c 0]
set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
set filesofDirectory [glob -nocomplain -directory $name -type f *]
if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
set x "number of files in $name is [llength $filesofDirectory]"
puts $fh [join $x ]
}
}
close $fh
然而,当我修改相同的代码以获得输出时:
set fh [open $e w]
while {[llength $c]} {
set name [lindex $c 0]
set c [concat [glob -nocomplain -directory [lindex $c 0] -type d *] [lrange $c 1 end]]
set filesofDirectory [glob -nocomplain -directory $name -type f *]
if { [llength $filesofDirectory] > 0 && $d == "fftc"} {
set x "number of files in $name"
set y [llength $filesofDirectory]
puts $fh [join $x "," $y]
}
}
close $fh
请提出解决方法
要将目录分解转储到可在 Excel 中使用的 CSV 文件中,此代码应该有效:
package require csv
set c .
set d fftc
set e foo.csv
proc glob2csv {c d fh} {
foreach name $c {
if {[file isdirectory $name]} {
set n [llength [glob -nocomplain -directory $name -type f *]]
if {$n > 0 && $d eq "fftc"} {
chan puts $fh [csv::join [list "number of files in $name is" $n]]
}
glob2csv [glob -nocomplain -directory $name -type d *] $d $fh
}
}
}
try {
open $e w
} on ok fh {
glob2csv $c $d $fh
} finally {
catch {chan close $fh}
}
我在这里做了很多令人不安的假设,因为我真的不知道你的代码是关于什么的。您可能希望使用 csv::join
的可选参数来调整 CSV 文件的格式。例如,在我的语言环境中,我需要将分隔符设置为制表符 (\t
) 以避免 Excel 将每一行都视为一个字符串。
文档:catch, chan, file, foreach, glob, if, list, llength, open, package, proc, set, try