@myxz

Как удалить лишние символы из файла сsv в определенной колонке через PowerShell?

Уважаемые знатоки подскажите есть файла сsv такого вида:

ExternalEmailAddress,FirstName,LastName,DisplayName,StreetAddress,City,StateorProvince,PostalCode,Phone,MobilePhone,Pager,HomePhone,Company,Title,OtherTelephone,Department,CountryOrRegion,Fax,Initials,Notes,Office,Manager
a.burav@test.ua,Анастасія,Бурав,Анастасія Бурав,,,,,,,,,test,менеджер з персоналу,,Офіс  Департамент HR  відділ рекрутингу,,,,,,,,,
ada.sorokina@test.ua,Ада,Сорокін,Ада Сорокін,,,,,,,,,test,керуючий магазином 3 категорії,,Київ  Bublik-13 Київ  (В-13)управління,,,,,,,,,
ads@test.ua,Advertisement,Manager,Advertisement Manager,,,,,,,,,test,,,,,,,,,,,,


По задаче взять СSV ФАЙЛ вытащить 2 столбика $Title и $Departmen если в данных таблицах для каждой строчки сверх 50 символов обрезать и записать .Поставив на место переменные

Если там к примеру $Title пустой а $Department нет, то так и записать пустой Title и проверить $Departme не превышает ли он 50 символов если нет также записать на свое место, если превышает обрезать до 50 символов и записать в файл
Если пустая ячейка оставить пустой делаю вот так:


# Указываем исходный файл
$impfile = "C:\Laba\kniga123.csv"
# Импортируем файл, указывая в качестве разделителя символ точку с запятой
$users =Import-Csv -Path $impfile -Delimiter ","
#Запускаем цикл и парсим каждую строчку
$(foreach ($user in $users)
{
#Считыаем данные из каждой ячейки матрицы в свою переменную
$ExternalEmailAddress = $user.ExternalEmailAddress;
$FirstName = $user.FirstName;
$LastName = $user.LastName;
$DisplayName = $user.DisplayName;
$StreetAddress = $user.StreetAddress;
$City = $user.City;
$StateorProvince = $user.StateorProvince;
$PostalCode = $user.PostalCode;
$Phone = $user.Phone;
$MobilePhone = $user.MobilePhone;
$Pager = $user.Pager;
$HomePhone = $user.HomePhone;
$Company = $user.Company;
$Title = $user.Title;
$OtherTelephone = $user.OtherTelephone;
$Department = $user.Department;
$CountryOrRegion = $user.CountryOrRegion;
$Fax = $user.Fax;
$Initials = $user.Initials;
$Notes = $user.Notes;
$Office = $user.Office;
$Manager = $user.Manager;

#Условия проверки если не пустая строка удаляем
If ($Title -ne $null)  
{($Title.Remove(50))
Else {If ($Department -ne $null)
{($Department.Remove(50))}
}}

#Собираю обратно таблицу в изначальный вид но с изменеными данными
$a=$ExternalEmailAddress,$FirstName,$LastName,$DisplayName,$StreetAddress,$City,$StateorProvince,$PostalCode,$Phone,$MobilePhone,$Pager,$HomePhone,$Company,$Title,$OtherTelephone,$Department,$CountryOrRegion,$Fax,$Initials,$Notes,$Office,$Manager -join ','

#Для вывода результата перед записью в файл
Write-Output $a

})| Out-File -FilePath 'C:\Laba\knigatest777.csv' -Append -Width 300;


но результат таков что символы не удаляются в части срок и в файл пишется дичь

Буду рад за помощь.
  • Вопрос задан
  • 382 просмотра
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Вот это звучит очень дико и непонятно
Если там к примеру $Title пустой а $Department нет, то так и записать пустой Title и проверить $Departme не превышает ли он 50 символов если нет также записать на свое место, если превышает обрезать до 50 символов и записать в файл

Схема работы у вас переусложнена
Должно быть типа того
Import-csv ...... |
  Foreach-Object {
    # Тут обработки, которых я не очень понял
    #   Я просто обрезаю title до 50
    if ($_.Title.Length -gt 50) {
       # Вам явно не хватает присвоения результата remove(),
       #   я сделал по-другому, но суть та же
       $_.Title = $_.Title.Substring(0, 50)
    }
    # вывод объекта дальше по конвейеру
    $_
  } |
  # Тут специально предназначенная для вывода csv команда, а не out-file
  Export-csv .....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы