我在以下单独的数组中都有以下数据,例如:atten(),power(),bandwidth(),Time()
Atten Power Bandwidth Time
30 1.52E+01 52638515 0
31 1.51E+01 49807360 10
32 1.46E+01 52848230 20
33 1.51E+01 39845888 30
我需要将排列更改为以下格式
Atten Power Bandwidth Time
30 1.52E+01 52638515 0
30 1.52E+01 49807360 10
31 1.51E+01 52848230 20
31 1.51E+01 39845888 30
. . . .
现在我需要使()和power()出现两次而不更改数据带宽()和csv格式的excel中的时间???以下是我如何将数据写入excel中CSV格式。
set application [::tcom::ref createobject "Excel.Application"]
set XlFileFormat(xlCSV) [expr 6]
set workbooks [$application Workbooks]
set workbook [$workbooks Add]
$application DisplayAlerts False
set worksheets [$workbook Worksheets]
set worksheet [$worksheets Item [expr 1]]
set cells [$worksheet Cells]
set rows [array size atten]
for {set row 1} {$row <= $rows} {incr row} {
$cells Item $row "A" $atten($row)
}
答案 0 :(得分:1)
以下代码段是如何使用按时间顺序排列的数组键列表的示例,以便按顺序打印出数组内容。然后用它来创建一个包含每个元素的数组。
#!/usr/bin/tclsh
proc add_element {array_name key value} {
upvar $array_name aa
if { ![info exists aa($key)] } {
set aa($key) $value
lappend aa() $key
}
}
add_element names 1 Jane
add_element names 2 Tom
add_element names 3 Elisabeth
add_element names 4 Ted
add_element names 5 Sally
foreach e $names() {
add_element morenames $e $names($e)
add_element morenames $[expr $e + 1 ] $names($e)
}
foreach e $morenames() {
puts $morenames($e)
}
为了解决您的问题,您将根据上面的示例使用double元素为注意和电源生成新阵列。然后,您将使用类似于上面示例的函数生成其他数组,除非它们在迭代时已经返回了有序数。
然后你会使用类似下面代码片段的东西来迭代其他数组,比如newTime:
set rows [array size newTime]
for {set row 1} {$row <= $rows} {incr row} {
$cells Item $row "A" $newatten($row)
$cells Item $row "B" $newpower($row)
$cells Item $row "C" $newbandwidth($row)
$cells Item $row "C" $newTime($row)
}
以下代码段是如何重新映射TCL数组(关联数组或HashMap)的数字键的示例。
#!/usr/bin/tclsh
set names(1) Jane
set names(2) Tom
set names(3) Elisabeth
set names(4) Robert
set names(5) Julia
set names(6) Victoria
foreach n [array names names] {
puts $n
puts $names($n)
}
puts "-------------"
foreach n [array names names] {
set newnames([expr $n -1]) $names($n)
}
foreach n [array names newnames] {
puts $n
puts $newnames($n)
}
这不足以做你想做的事。
您必须执行此操作,然后删除unset
第一个元素并添加set
最后一个元素。
你没有在你的问题中指明你的最后一个元素是什么。
如果您使用非数字键,例如字符串键,那么您必须为这些键提供一些顺序概念,无论是通过将它们映射到数字键还是使用其他方法。
请注意,除非您告诉他们,否则TCL数组不会在foreach循环中按顺序返回。
TCL列表更适合这种情况,如下所述。
#!/usr/bin/tclsh
set i 0
foreach j "a b c" {
puts "$j is item number $i in list x"
incr i
}
您还没有指定要转换的数据结构,或者您只是想将输入写入屏幕(使用puts
)或文件。
例如,您是否要为表格生成以下任何数据结构?
有关详细信息,请参阅: