Манипулирование массивом в TCL - PullRequest
0 голосов
/ 12 марта 2012

У меня есть следующие данные, каждый в отдельных массивах, таких как acce (), 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 () дважды, не меняя ничего для полосы пропускания массивов () и времени в excel в формате csv ??? .. Далее я пишу свойданные, чтобы преуспеть в формате 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)

                                                        } 

1 Ответ

1 голос
/ 13 марта 2012

Следующий фрагмент кода является примером того, как использовать хронологический список ключей массива для распечатки содержимого массива по порядку.Затем он используется для создания массива с двумя из каждого элемента.

#!/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)
}

Для решения вашей проблемы вы должны сгенерировать новые массивы для внимания и мощности с двойным элементом, как показано в примере выше.Затем вы должны сгенерировать другие массивы, используя функцию, аналогичную приведенной выше, если только они уже не возвращаются в порядке упорядочения при их повторении.

Затем вы перебираете другие массивы, скажем, 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) илик файлу.

Например, хотите ли вы сгенерировать любую из следующих структур данных для вашей таблицы?

  • массив TCL массивов TCL (Hashmap of Hashmap)
  • список списков
  • массив списков TCL
  • списокTCL Arrays (Список Hashmap)

Для получения дополнительной информации см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...