Как сопоставить столбец с другим значением столбца из CSV-файла?

Предположим, у меня есть файл csv следующим образом:

Как сопоставить столбец с другим значением столбца из CSV-файла?

role    member
role1   memberA
role1   memberB
role2   memberC
role3   memberX
role3   memberY
role3   memberC

Я хочу добавить в базу данных всех участников ролей в базе данных

$csvR = (Import-Csv $csvFile).role

        foreach ($Role in $csvR)
        {
            foreach ($Member in $Role) 
            {   
                & ".\AddMembers.ps1" -AddtoDatabaseOnOneServer "$Role" "$Member" "$DatabaseName" "$ServerInput"
            } 
        }

Будет ли этот цикл распознавать, например, добавление участника A в роль 1, участника B в роль 1, участника C в роль 2 и т. д.? другими словами, правильный ли этот внутренний цикл: foreach ($Member in $Role)

Ты это пробовал? Объекты, выводимые Import-Csv, представляют каждую строку входного CSV со свойством String для каждого столбца. Он не собирается создавать какие-либо коллекции или выполнять какие-либо дальнейшие интерпретации/ассоциации, если вы не дадите ему указание. Кроме того, установив $csvR в .role, вы убираете свойство Role и отбрасываете остальную часть объекта.

Lance U. Matthews 23.05.2019 00:08

взгляните на справку по командлету Group-Object. он может группировать объекты из вашего Import-CSV по свойству .Role, а затем вы можете перебирать полученные группы, чтобы назначить .Member.Role.

Lee_Dailey 23.05.2019 00:12

@Lee_Dailey, допустим, я делаю так: Import-Csv "E:\foo.csv"| Роль группового объекта, член. как присвоить значения? и после присвоения значений, как мне использовать его в цикле?

Cataster 23.05.2019 00:25

@Cataster - посмотрите, что у вас есть после того, как вы сохраните сгруппированные данные в $Var. это будет массив объектов, и у каждого будет .Group, в котором есть все соответствующие объекты из импорта CSV. вы можете повторить это ... [ухмылка] ///// если вы замените эту неприятную, неприглядную картинку бесполезный ваших выборочных данных несколькими строками из вашего источника, я мог бы сделать демонстрацию этой идеи. я не буду беспокоиться, если вы не опубликуете полезные образцы данных, хотя. [хмуриться]

Lee_Dailey 23.05.2019 00:30

Вы можете просто выполнить один цикл и получить доступ к ролям и членам как к свойствам: $csvR = Import-Csv $csvFile; foreach ($row in $csvR) { $row.role; $row.member }. Если ваш скрипт AddMembers.ps1 принимает только одну роль и одного члена в качестве параметра, вы будете выполнять своего рода итерацию.

AdminOfThings 23.05.2019 00:33

@Lee_Dailey так нравится? $Var = Select-Object @{Name='Role' ;Expression = {$_.Values[0]}}, @{Name='Members';Expression = {$_.Values[1]}}

Cataster 23.05.2019 00:34

@Lee_Dailey только что вставил их в свой пост :)

Cataster 23.05.2019 00:35

@AdminOfThings да, мой скрипт AddMembers.ps1 принимает только одну роль и одного члена в качестве параметра

Cataster 23.05.2019 00:36

@Cataster - я добавил ответ, который показывает, что я имею в виду о том, как использовать Group-Object для того, к чему вы, кажется, стремитесь.

Lee_Dailey 23.05.2019 01:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вот демонстрация того, как использовать командлет Group-Object для перебора элементов в импортированном файле CSV по сгруппированному свойству. [ухмылка]

в строке give person вы можете либо добавить свой звонок в свой сценарий для каждого человека, либо собрать имена всех людей для этого .Role и добавить их всех сразу.

# fake reading in a CSV file
#    in real life, use Import-CSV
$InStuff = @'
role, member
role1, memberA
role1, memberB
role2, memberC
role3, memberX
role3, memberY
role3, memberC
'@ | ConvertFrom-Csv

$GroupedIS = $InStuff |
    Group-Object -Property Role

foreach ($GIS_Item in $GroupedIS)
    {
    foreach ($GG_Item in $GIS_Item.Group)
        {
        'give person [ {0} ] the role [ {1} ]' -f $GG_Item.Member, $GG_Item.Role
        }
    }

выход ...

give person [ memberA ] the role [ role1 ]
give person [ memberB ] the role [ role1 ]
give person [ memberC ] the role [ role2 ]
give person [ memberX ] the role [ role3 ]
give person [ memberY ] the role [ role3 ]
give person [ memberC ] the role [ role3 ]

прикольно, пробую!

Cataster 23.05.2019 01:02

@Cataster - это действительно отличный командлет ... и вы можете группировать по нескольким свойствам ... и вы также используете вычисляемые свойства. [ухмылка]

Lee_Dailey 23.05.2019 01:26

@Cataster - добро пожаловать! рад, что помог... [ухмылка]

Lee_Dailey 23.05.2019 02:18

Другие вопросы по теме