Использование «Compare-Object» приводит к неправильному форматированию - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть два массива имен.Один содержит данные, считанные из текстового файла, а другой - из файла CSV. Я пытаюсь вернуть списки имен, которые появляются в обоих списках, и которые появляются только в отдельных списках. Для файла CSV PowerShell изначально хотел поместить "Name=" перед каждым элементом, но яиспользовал $formattedName = $csvFile -replace "Name=","" чтобы избавиться от него.Я должен также упомянуть, что Name является заголовком для этого столбца.В этот момент, если я вызываю переменную $formattedName, она возвращает список имен без Name= перед ними (точно так же, как текст, если отформатирован для сравнения).

Теперь при попытке использоватьCompare-Object, я столкнулся с проблемой.Мой код гласит:

Compare-Object -ReferenceObject $txtFile -DifferenceObject $formattedName -IncludeEqual

Теперь при запуске этой команды PowerShell по-прежнему помещает Name= перед каждым элементом для файла CSV, несмотря на тот факт, что я просто отформатировал его, чтобы этого не делать.Мой конечный результат - два списка, один из которых содержит все элементы из txt-файла, а другой содержит все элементы из CSV-файла.Нет двух совпадающих значений, потому что Steven не совпадает с Name=Steven.Пример вывода:

Steven =>
Name=Steven <=

Как я могу исправить это?Я правильно использую это?

1 Ответ

0 голосов
/ 15 декабря 2018

Без правильных примеров как вашего CSV-файла, так и текстового файла, из вашего вопроса, я думаю, я могу понять, что ваш CSV выглядит примерно так:

"Surname","Name"
"Seagal","Steven"
"Rambo","John"
"Schwarzenegger","Arnold"

Глядя на вывод, который вы показалиЯ понимаю, что текстовый файл - это просто набор (первых) имен, каждое в отдельной строке, например:

Steven
Sylvester
John

Чтобы сравнить их, вам нужно отфильтровать только столбец Name из вашегоФайл CSV, поэтому он будет соответствовать массиву, который вы читаете из текстового файла.(Вы действительно говорите: «. Я должен также упомянуть, что Name является заголовком для этого столбца. »)

Попробуйте это тогда:

# import the .csv file and extract only the 'Name' column from it as string array
$csv = (Import-Csv -Path "D:\blah.csv").Name

# read the .txt file which apparently contains only firstnames, each on a separate line
$txt = Get-Content -Path "D:\names.txt"

Compare-Object -ReferenceObject $txt -DifferenceObject $csv -IncludeEqual

Выполнение этого на примерефайлы, которые я дал, вывод:

InputObject SideIndicator
----------- -------------
Steven      ==           
John        ==           
Arnold      =>           
Sylvester   <=  

Где

  • «Стивен» и «Джон» появляются в обоих файлах,
  • «Арнольд» тольконаходится в файле CSV, а
  • «Сильвестр» находится в текстовом файле, но не в CSV.
...