Передача данных из файла csv в существующий foreach l oop в Powershell - PullRequest
1 голос
/ 27 мая 2020

У меня есть этот foreach l oop, который будет повторять значение из имени файла и данных и передавать его в существующий шаблон

foreach($file in Get-ChildItem path\ -Filter *.txt){
  foreach ($line in $file |Get-Content){
        @"
group {1}
name {0} 
realname {0}
"@ -f $line,$file.BaseName
    }
}

{1} - имя файла, а {0} - данные из строки каждого файла .

Теперь мне нужно передать второе значение из другого файла csv, которое выглядит примерно так

group1,671
group2,672
......

Как передать значение из второго места файла csv (671, 672) в существующий скрипт, предоставляющий первую строку (группа1, группа2), имеет то же значение, что и имя файла {1}, поэтому в скрипте он будет выглядеть так:

foreach($file in Get-ChildItem path\ -Filter *.txt){
  foreach ($line in $file |Get-Content){
        @"
group {1}
name {0} 
realname {0}
name {0}  id:{2}
"@ -f $line,$file.BaseName
    }
}

Значение {2} должно соответствовать значению {1 } в основном файле. Например: group1.txt содержит это

user1

Возвращаемый шаблон должен дать этот результат

group group1 ({1} from main file)
name user1 ({0} from main file) 
realname ({0} from main file) 
name ({0} from main file)  id:671({2} integer/2nd place from cvs file) 

Значение {2} в этом случае 671, потому что в файле csv это целое число из строки, содержащей имя файла (группа1), id

Короче, logi c должен быть

If {1} = first string from csv file, {2} = 2nd place/integer in csv file

1 Ответ

1 голос
/ 27 мая 2020

Ваш код показывает, что имена групп фактически совпадают с именем BaseName файла.

Чтобы добавить совпадающие значения из второго файла, вы можете сделать это:

# read the data from the second csv
$groupCsv = Import-Csv -Path 'path\to\the\second\file' -Header Group, Id
# create a hashtable from this data for fast lookup
$groups = @{}
$groupCsv | ForEach-Object { $groups[$_.Group] = $_.Id }

$template = @"
group {1}
name {0} 
realname {0}
name {0}  id:{2}
"@

foreach($file in Get-ChildItem 'path' -Filter *.txt) {
    foreach ($line in $file | Get-Content ) {
        $template -f $line, $file.BaseName, $groups[$file.BaseName]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...