Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Вывод элементов списка в виде массива

Ответить
Настройки темы
PowerShell - Вывод элементов списка в виде массива

Аватара для NickM

Ветеран


Contributor


Сообщения: 4635
Благодарности: 1115


Конфигурация

Профиль | Отправить PM | Цитировать


Уважаемые, здравствуйте!

Задалcя вопросом обработки *.xml файлов, вроде бы даже добился какого-никакого решения поставленной перед Собою задачи, но вот одного не могу разрешить: вывод элемента списка в виде массива, Powershell его "подрезает" и отображает только несколько первых символов.

Список объявляю так:
Код: Выделить весь код
$list2 = New-Object System.Collections.Generic.List[System.Object];
Наполняю так:
Код: Выделить весь код
$aSumItog = @(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
foreach ($item in $tmplist2) {
	$list2.Add([PSCustomObject]@{cFIO = $item; cSum = $aSumItog})
}
При выводе в консоль или в файл вижу следуюущее:
Код: Выделить весь код
cFIO                            cSum                   
----                            ----                   
Петров Петр Петрович      {0, 0, 0, 0...}
, а хотелось бы видеть все столбцы массива.

Может, кто подскажет как этого добиться?

Отправлено: 19:24, 25-10-2023

 

Deadooshka


Сообщения: 2566
Благодарности: 698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
... | Format-Table 'cFIO', @{ Label='cSum'; Expression={ $_.cSum -join ', ' } }
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:08, 26-10-2023 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


еще есть вариант перестать рассчитывать на нативные типы повершелла и просто как JSON выводить данные

Код: Выделить весь код
$list2 | convertto-json -depth 10
...


Код: Выделить весь код
{
        "cFIO":  "Петров Петр Петрович",
        "cSum":  [
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0,
                     0
                 ]
    }
]

Отправлено: 04:44, 26-10-2023 | #3


Аватара для NickM

Ветеран


Contributor


Сообщения: 4635
Благодарности: 1115

Профиль | Отправить PM | Цитировать


Цитата Serguei Kouzmine:
и просто как JSON выводить данные »
Ага, сгодится для дальнейшего парсинга, но Мне надо было в табличный вид, для человеческого восприятия;

Цитата Sham:
Код: Выделить весь код
... | Format-Table 'cFIO', @{ Label='cSum'; Expression={ $_.cSum -join ', ' } }
»
Спасибо, попробую прикрутить.

Вчера уже выкрутился созданием нового списка и впихиванием в него элементов массива, да, топорно получилось.

Отправлено: 06:23, 26-10-2023 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6705
Благодарности: 1576

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$aSumItog -join "`n"

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 10:13, 26-10-2023 | #5


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата NickM:
выкрутился созданием нового списка и впихиванием в него элементов массива »
массив приводим к строке (вариантов мульён) и впихиваем невпихуемое в столбец...
один из вариантов:
Код: Выделить весь код
[string]$aSumItog

-------
scio me nihil scire. Ѫ


Отправлено: 13:30, 26-10-2023 | #6


Аватара для NickM

Ветеран


Contributor


Сообщения: 4635
Благодарности: 1115

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
один из вариантов: »
Благодарю за участие!

Поставленный вопрос решил, но очень мало опыта работы с powershell, практически нулевой.

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

Поделюсь, может гуру, при желании, подскажут, как это упростить?


Пару блоков, которые Мне кажутся излишними, но не знаю как их упростить:


1.
В этом пункте требуется получить список $list1 с уникальными текстовыми значениями и инициализированным массивом чисел.

Наполняю два списка данными из *.xml, $tmplist1 используется как временный, для сортировки. В $list1 и $list3 производится работа с массивом числовых значений:
Код: Выделить весь код
#Основные массивы-списки для всех требуемых значений
$list1 = New-Object System.Collections.Generic.List[System.Object];
$list3 = New-Object System.Collections.Generic.List[System.Object];
...
$list3.Add([PSCustomObject]@{cPeriod = $cPeriod; cFIO = $cFIO; cINN = $cINN; cSNILS = $cSNILS; cmes = $cMes; cSum = $cSum});
...

#Подготовим временный массив - выполним сортировку и уберём дубли сотрудников
$tmplist1 = New-Object System.Collections.Generic.List[System.Object];
$tmplist1 = $list3 | Select-Object cFIO, cINN, cSNILS | Sort-Object cFIO, cINN, cSNILS | Get-Unique -AsString 

#Инициализируем список c перс.данными и пустым массивом для сумм
$aSumItog = @(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
foreach ($item in $tmplist1) {
$list1.Add([PSCustomObject]@{cFIO = $item.cFIO; cINN = $item.cINN; cSNILS = $item.cSNILS; cSum = $aSumItog})
}

2.
Как итог выполнения всего кода, наполненный рабочий список $list1 требуется вывести в *.csv с разделителем [char]9, т.е. сформировать табличную часть.

Реализовал, опять же, с использованием дополнительного списка, где наполняю этот список:
Код: Выделить весь код
$tmplist3 = [System.Collections.Generic.List[string]]::new()
foreach ($item in $list1) {
	$tmplist3.Add($item.cFIO + [char]9 + $item.cINN + [char]9 + $item.cSNILS + [char]9 + ($item.cSum -join "`t"))
}
, а после сохраняю:
Код: Выделить весь код
$tmplist3 | Out-File 'КНД_1151111.csv'

Последний раз редактировалось NickM, 26-10-2023 в 15:31.


Отправлено: 14:09, 26-10-2023 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата NickM:
Пару блоков, которые Мне кажутся излишними, но не знаю как их упростить »
Задача очень похожа на ситуацию с проблемой XY

Цитата NickM:
Наполняю два списка данными из *.xml »
Здесь, для решения вопроса, просто необходимо увидеть задачу в целом.
Т.е. нужен пример файла (а лучше файлов) с исходными данными (конфиденциальную инфу можно заменить какими-нибудь фейками) и желаемый результат, т.е. то, что необходимо получить из исходных данных. Промежуточные "просмотры" данных в консоли, не имеют смысла обычно, но если сильно желание, то тоже надо бы указать в каком виде хочется их просматривать.

-------
scio me nihil scire. Ѫ


Отправлено: 09:45, 27-10-2023 | #8


Аватара для NickM

Ветеран


Contributor


Сообщения: 4635
Благодарности: 1115

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip xml.zip
(2.7 Kb, 18 просмотров)

Цитата YuS_2:
Задача очень похожа на ситуацию с проблемой XY »
Не, задача предельная ясна и понятна - произвести сверку двух отчётных форм, которые в *.xml формате и развернуть их в табличный вид и сохранить в *.csv для возможности дальнейших манипуляций в табличном редакторе;

Сверка заключается в том, что бы проверить соответствие всех перс.данных по физ.лицам отражённых в трёх месячных формах 1151162 с квартальной формой 1151111.
Для этого, эти перс.данные из *.xml файлов извлекаются, помещаются в списки, а списки уже построчно сравниваются;

Цитата YuS_2:
Т.е. нужен пример файла (а лучше файлов) с исходными данными (конфиденциальную инфу можно заменить какими-нибудь фейками) и желаемый результат »
Файлы найти не проблема, это электронный вариант отчётных форм налоговых деклараций КНД 1151111 и КНД 1151162.

Заменил и приложил;

Цитата YuS_2:
Промежуточные "просмотры" данных в консоли, не имеют смысла обычно, но если сильно желание, то тоже надо бы указать в каком виде хочется их просматривать. »
Зачастую, в консоли, просматриваю/ отлаживаю вывод, из-за отсутствия знаний, т.к. сказать "негорячую" просматриваю результаты выполнения той или иной процедуры/ функции.

Последний раз редактировалось NickM, 27-10-2023 в 11:58.


Отправлено: 11:28, 27-10-2023 | #9


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата NickM:
помещаются в списки, а списки уже построчно сравниваются »
Цитата NickM:
Файлы найти не проблема, это электронный вариант отчётных форм налоговых деклараций КНД 1151111 и КНД 1151162.
Заменил и приложил»
так, вот уже проще... только, что должно получиться из этих файлов на выходе? Т.е. конечный результат (файл) как должен выглядеть? Для полного понимания его тоже надо бы сделать вручную...
И да, судя по файлам, количество элементов (и атрибутов элементов тоже) в них различное... а могут быть ещё какие-нибудь поля, которых нет в примерах? Если парсить xml, то нужны будут наименования элементов, по которым необходимо делать выборку... или там просто всё подряд, что найдем, то и "выплюнуть" на выход?

-------
scio me nihil scire. Ѫ


Отправлено: 14:43, 27-10-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Вывод элементов списка в виде массива

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Анализ элементов числового массива kelevara Скриптовые языки администрирования Windows 8 08-05-2013 16:40
C/C++ - Подсчет суммы положительных элементов массива antoiiika Программирование и базы данных 2 19-11-2011 05:20
PowerShell - Вывод нумерации элементов массива в консоль tarasov.evgeny Скриптовые языки администрирования Windows 0 12-04-2011 13:36
C/C++ - [решено] Найти среднее геометрическое элементов массива А (С++) kmi567 Программирование и базы данных 2 10-12-2010 05:06
С/С++ | Выбор 10 случайных элементов из массива Vovius Программирование и базы данных 5 29-08-2006 19:37




 
Переход