none
PowerSell двумерные массив RRS feed

  • Вопрос

  • Не как не могу найти обычный двумерный массив. И то как с ним работат.информации вообще ни где нет. Мне нужна тупо таблица. И ни кто к омощи простейшей двумерной матрице оказывается ни кто не прибега. Господа мне нужно таблица типа

    Поле1                    Поле2               Поле3
    -------                    --------              -------

    Знание1             Значение2        Значение3

    вообщем суть такая. Но мне нужно прибавлять значения к массиву, т.к. точное число строк не известно. Тут же на форуме встретилобработку типа

    1..5 | foreach {new-object psobject | add-member noteproperty "Поле1" "Значение1$_" -passthru | add-member noteproperty "Поле2" "Значение2$_" -passthru | add-member noteproperty "Поле3" "Значение3$_" -passthru}

    НО я не пойму как происходит процесс добавления и как прибавить значения к столбцу.

    10 сентября 2009 г. 3:49

Ответы

  • add-member служит для добавления новых свойств и методов к расширяемому типу.
    Но в данном случае, почему не воспользоваться обычной таблицей??
    $tbl = New-Object System.Data.DataTable

    $tbl.Columns.Add("Col1";)
    $tbl.Columns.Add("Col2")
    $tbl.Columns.Add("Col3")
    ...

    $row = $tbl.NewRow();
     $row["Col1"]= "Val1";
     $row["Col2"]= "Val2";
     $row["Col3"]= "Val3";
     $tbl.Rows.Add($row);
     

    $tbl

    10 сентября 2009 г. 6:10

Все ответы

  • add-member служит для добавления новых свойств и методов к расширяемому типу.
    Но в данном случае, почему не воспользоваться обычной таблицей??
    $tbl = New-Object System.Data.DataTable

    $tbl.Columns.Add("Col1";)
    $tbl.Columns.Add("Col2")
    $tbl.Columns.Add("Col3")
    ...

    $row = $tbl.NewRow();
     $row["Col1"]= "Val1";
     $row["Col2"]= "Val2";
     $row["Col3"]= "Val3";
     $tbl.Rows.Add($row);
     

    $tbl

    10 сентября 2009 г. 6:10
  • я делал так:

    $Ini=@{}
    ...
    $Ini["$CurrentSection"]=@{}
    ...
    $Ini["$CurrentSection"]["$ParamName"]= $ParamValue
    ...
    • Предложено в качестве ответа s.h.s. _ 10 сентября 2009 г. 7:57
    • Отменено предложение в качестве ответа Unwform_alex 11 сентября 2009 г. 4:36
    10 сентября 2009 г. 6:42
  • s.h.s.
    Это у тебя получается ассоциативный массив или хеш таблица, как ее еще называют. Там только только два поля Name и Value. мне нужна таблица с несколькими полями. как минимум 5 полей.
    OlegGel
    Результатом твоего кода. получается вот это.
    Col1 : Val12
    Col2 : Val2
    Col3 : Val3
    Так же два столбца.
    11 сентября 2009 г. 3:12
  • Посмотрите описание System.Data.DataTable - это таблица! В ней есть столбцы и ряды - сколько создадите столько и будет.


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Предложено в качестве ответа Andrey Zakharchenko 11 сентября 2009 г. 5:56
    11 сентября 2009 г. 5:33
    Модератор
  • s.h.s.
    Это у тебя получается ассоциативный массив или хеш таблица, как ее еще называют. Там только только два поля Name и Value. мне нужна таблица с несколькими полями. как минимум 5 полей.

    "Или я чего-то не понимаю или одно из двух" (с) ;) Name и Value могут принимать разные значения, Value, так же может быть хеш-таблицей и т.д. А к самой хэш-таблице можно обращаться, как к массиву. Чем тебе не угодила хеш таблица - не понимаю.

    Если брать твои исходные данные из первого поста, то получается как-то так:

    PS > $NewObject=@{}
    PS> #Заполняем таблицу
    PS > $NewObject["Поле1"]="Значение1"
    PS > $NewObject["Поле2"]="Значение2"
    ...
    PS > $NewObject["Поле100"]="Значение100"
    ...
    PS> #Обращаемся к элементам таблицы и получаем их значения
    PS > $NewObject["Поле2"]
    Значение2
    PS > $NewObject["Поле1"]
    Значение1
    PS >
    ...
    PS > $NewObject["Поле100"]
    Значение100
    PS >
    ______________
    или, например, так:

    $NewObject=@{}
    PS > 1..5|%{$NewObject["Поле$_"]="Значение$_"}

    PS > $NewObject["Поле1"]
    Значение1
    PS > $NewObject["Поле5"]
    Значение5
    PS >

    11 сентября 2009 г. 5:47
  • s.h.s.
    Это у тебя получается ассоциативный массив или хеш таблица, как ее еще называют. Там только только два поля Name и Value. мне нужна таблица с несколькими полями. как минимум 5 полей.
    OlegGel
    Результатом твоего кода. получается вот это.
    Col1 : Val12
    Col2 : Val2
    Col3 : Val3
    Так же два столбца.
    Такой вывод получается если просто написать $tbl и использовать вывод по умолчанию. Попробуйте добавить еще одну строку и посмотрите результат:) Для объекта DataTable желательно реализовать свой вывод на консоль в более удобной форме.
     foreach($c in $tbl.Columns)
    {
        Write-Host $c.ColumnName " " -nonewline
    }
    write-host
    write-host "--------------"
    foreach($r in $tbl.Rows)
    {
         foreach($c in $tbl.Columns)
        {
             write-host $r[$c] " " -nonewline
        }
        Write-host
    }
    11 сентября 2009 г. 6:50
  • >Такой вывод получается если просто написать $tbl и использовать вывод по умолчанию. Попробуйте добавить еще одну строку и посмотрите результат:)

    честно говоря, не понял, какую строку, зачем и куда надо добавить? ;)


    blog: http://shss.wordpress.com/
    12 ноября 2010 г. 13:45
  • Еще вариант:

    $user_1 = new-object -t psobject -p @{ Name="Dmitry"; Age=43; Sex="male"}
    $user_2 = new-object -t psobject -p @{ Name="Julia"; Age=18; Sex="female"}

    $user_1, $user_2 | format-table Name, Age, Sex

    12 ноября 2010 г. 16:54