• Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    MaxKozlov,
    все верно, привел входные данные к единому стилю и все заработало корректно. Спасибо за помощь!
  • Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    Выяснил почему сравнение возвращает false - потому что $name_data[$field] возвращает пустоту..
    Файлы xml идентичные, разница лишь в выделенной строке в случае автоматического наполнения:
    <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="0">
        <TN RefId="0">
          <T>System.Collections.Hashtable</T>
          <T>System.Object</T>
        </TN>
        <DCT>
          <En>
            <S N="Key">object3</S>
            <Obj N="Value" RefId="1">
              <TN RefId="1">
                <T>System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]</T>
                <T>System.Object</T>
              </TN>
              <LST>
                <Obj RefId="2">
                  <TN RefId="2">
    ---->               <T>Selected.Microsoft.PowerShell.Commands.GenericMeasureInfo</T>
                    <T>System.Management.Automation.PSCustomObject</T>
                    <T>System.Object</T>
                  </TN>
                  <MS>
                    <S N="name">name2</S>
                    <S N="object">object3</S>
                    <S N="quantity">4</S>
                  </MS>
                </Obj>
              </LST>
            </Obj>
          </En>
          <En>
            <S N="Key">object4</S>
            <Obj N="Value" RefId="3">
              <TNRef RefId="1" />
              <LST>
                <Obj RefId="4">
                  <TNRef RefId="2" />
                  <MS>
                    <S N="name">name2</S>
                    <S N="object">object4</S>
                    <S N="quantity">1</S>
                  </MS>
                </Obj>
              </LST>
            </Obj>
          </En>
        </DCT>
      </Obj>
    </Objs>


    PS либо явно указываю, что там string, то xml вообще одинаковые
  • Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    MaxKozlov,
    Спасибо, Ваш пример с тестовыми данными работает и появилось немного своих мыслей.
    Но не пойму почему в случае с моими(наполненные не руками) данными $name_data.ContainsKey($field) всегда возвращает False и как это исправить

    Вывод:
    > $name_data
    Name Value
    ---- -----
    object1 {@{Name=name1; object=object1; quantity=1}}
    object2 {@{Name=name1; object=object2; quantity=8}}

    >$name_data.ContainsKey("object1")
    False
  • Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    MaxKozlov,
    Сочетание nameX+objectY встречается в массиве только 1 раз, т.е. в массиве может быть хоть хоть 6 строк name1, но с разными object

    Владимир,
    Как раз name, object и quantity связаны - nameX+objectY дает свой результат(quantity) и встречается во всем объеме $data_cur один раз

    > $data_cur | Get-member
    TypeName: Selected.System.String

    Name MemberType Definition
    ---- ---------- ----------
    Equals Method bool Equals(System.Object obj)
    GetHashCode Method int GetHashCode()
    GetType Method type GetType()
    ToString Method string ToString()
    Quantity NoteProperty System.Int32 Quantity=5
    Object NoteProperty System.String Datastore=object1
    Name NoteProperty System.String Hostname=name1

    > $data_cur.GetType()

    IsPublic IsSerial Name BaseType
    -------- -------- ---- --------
    True True Object[] System.Array

    >Вопрос-то мой был простой - "Откуда (вернее - как?) берутся данные?"
    Данные собираются так - получается список доступных name, далее у каждого name спрашивается его список доступных ему object, для каждого из которых подсчитывается количество quantity и строка name, object и quantity записывается в массив $data_cur
  • Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    MaxKozlov, Владимир,
    Согласен, возможно 3 переменные скорее запутывают и по сути к вопросу отношение имеют посредственное. Ограничимся просто наличием данных вида:
    1 набор: $data_cur
    name object quantity (int)
    name1 object1 1
    name1 object5 10
    name1 object2 5
    name2 object2 1
    name2 object3 4

    2 набор:
    object1 (яблоко )
    object2 (арбуз)
    object3 (огурец)
    object4 (петрушка)

    Попробую описать словами на примере картинки-таблицы и первого поста:
    есть некий Вася (name1), у него есть 1 яблоко (object1), так же у этого name1 есть 5 арбузов (object2), у него 0 огурцов (object3) и т.д.

    $data_cur.name $data_cur.object $data_cur.quantity
    Вася Яблоко 1
    Вася Арбуз 1
    (Вася Огурец 0) - этой строки там не будет

    а есть Иван (name2), у него 0 яблок (object1), 1 арбуз (object2), 4 огурца (object3) и т.д.

    Т.е. в моем понимании я должен пройтись по списку из $objects, выстроив их в горизонталь как аттрибуты и заполнить значения quatity из массива $data_cur для каждого name. Но у меня фигня какая-то получается на выходе, а должна быть табличка-картинка из первого поста..
  • Из объектов получить таблицу с привязкой к значениям?

    @AlexNov001 Автор вопроса
    Владимир,
    данные собираются циклами и скидываются в итоге в $data_cur += .. . Var1, 2, 3 между собой связаны в том плане, что это вывод значений name object quantity за итерацию цикла, т.е. условно у нас у name1 есть 5 штук object2 и т.д. а object в отдельном наборе это весь список возможных наименований, которые могут встречаться.
    Т.е. мы отталкиваемся в первую очередь от списка $objects и как бы по нему сверяем, какие значения quantity у name1, name2,.. А если данных нет, то записываем 0.

    MaxKozlov, не совсем удобно(да и не понятно как), т.к. хотелось бы иметь на выходе уже отсортированные данные, чтобы минимизировать дальнейшую обработку