Я пытаюсь обработать файл CSV размером 15 МБ, который имеет только три столбца. Например:Создание новых столбцов в CSV на основе рекурсивного поиска
StaffNumber,EmailAddress,Manager
123,[email protected],456.
мне нужно искать каждую строку файла CSV, отображает количество кадров, адрес электронной почты, а затем взять идентификационный номер менеджера и искать то, что, показывая их количество персонала и электронную почту, а затем возьмите их идентификатор менеджера и повторите то же самое. В конце концов, мне нужно, чтобы каждая строка CSV-файла имела идентификатор пользователя и адрес электронной почты, а - до трех идентификаторов менеджеров и электронной почты.
Я пытаюсь закончить с этим:
123,[email protected],456,[email protected],789,[email protected],098,[email protected]
Некоторые строки не содержат адрес электронной почты или номер удостоверения личности менеджера, так что бросает еще один ключ в работах. Я планировал добавить в эти поля просто «Бланк» или «Х».
До сих пор я забил этот простой скрипт для поиска по одному. Это работает, но это ужасно медленно. С сегодняшнего утра прошло 6 часов, чтобы получить 0,31% через этот файл. Тьфу!
Я прочитал, пока не полностью смутил себя тем, как лучше всего обрабатывать данные CSV на 15 МБ, разные версии PowerShell, лучшие на этой неделе и т. Д., А PowerShell далек от моего обычного языка (пожалейте на мой недостаток PS. Я просто пытался создать базовый тестовый сценарий, чтобы получить представление).
В настоящее время я запускаю PowerShell v4, и я знаю, что есть проблемы совместимости с более ранними версиями. Я хотел бы попытаться оставаться совместимым с будущими версиями как разумное.
Что было бы самым быстрым способом обработки этого файла? Только за 15 МБ за 300 000 строк я не беспокоюсь о ОЗУ. Я просто не знаю, как более эффективно выполнять этот поиск.
$FilePath = "C:\Temp\DA-UserList.csv"
$DAUserlist = Import-CSV $FilePath
$inputNumber = Read-Host -Prompt "Employee ID Number"
$DAUser1 = $DAUserlist | Where{$inputNumber -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser1){
$StaffNumber1 = $($item.StaffNumber)
$EmailAddress1 = $($item.EmailAddress)
$Manager1 = $($item.Manager)
printf $item.StaffNumber
printf ","
printf $EmailAddress1
$DAUser2 = $DAUserlist | Where{$Manager1 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser2){
$StaffNumber2 = $($item.StaffNumber)
$EmailAddress2 = $($item.EmailAddress)
$Manager2 = $($item.Manager)
printf ","
printf $StaffNumber2
printf ","
printf $EmailAddress2
$DAUser3 = $DAUserlist | Where{$Manager2 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser3){
$StaffNumber3 = $($item.StaffNumber)
$EmailAddress3 = $($item.EmailAddress)
$Manager3 = $($item.Manager)
printf ","
printf $StaffNumber3
printf ","
printf $EmailAddress3
$DAUser4 = $DAUserlist | Where{$Manager3 -match $_.StaffNumber}| Select -First 1
ForEach ($item in $DAUser4){
$StaffNumber4 = $($item.StaffNumber)
$EmailAddress4 = $($item.EmailAddress)
$Manager4 = $($item.Manager)
printf ","
printf $StaffNumber4
printf ","
printf $EmailAddress4
printf \n
}
}
}
}