Каждый день я получаю много файлов CSV, которые мне нужно импортировать в систему. Но прежде чем я могу их импортировать, мне нужно кодировать ВСЕ их в UTF-8, а затем загружать их по одному. Вот почему мне нужен скрипт, который кодирует все * .csv-файлы в UTF-8, а затем объединяет их в один файл.Проблема с файлом с табуляцией Out-File
Сценарий работает нормально, но когда я экспортирую файл, первая вкладка была удалена, что является большой проблемой.
Как выглядит один файл, прежде чем он кодируется и сливался:
USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY
Y <firstname> <lastname> <[email protected]> de <text> <text> <randomnumber>
(Похоже, Stackoverflow не нравится вкладки или им просто в noobish ..: S)
На самом деле вторая строка начинается с одной вкладки, затем каждый «блок» разделяется одной вкладкой. За исключением последнего, это 7 вкладок между «текстом» и «случайным числом».
Когда я запускаю сценарий выглядит следующим образом:
USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY
Y <firstname> <lastname> [email protected] de <text> <text> <randomnumber>
Y <firstname> <lastname> [email protected] de <text> <text> <randomnumber>
Первая закладка теряется.
А вот сценарий PowerShell:
Copy-Item ".\1_Input\*.csv" ".\2_cache"
Get-ChildItem ".\2_Cache\*.csv" | foreach {
(Get-Content $_.FullName) | Set-Content $_.FullName -Encoding UTF8
}
ls ".\2_cache" -Fi *.csv | ipcsv |
ConvertTo-Csv -NoTypeInformation |
% { $_ -replace '"', ''} |
Out-File ".\3_output\concat.csv" -fo -en utf8
Remove-Item ".\2_cache\*.csv"
EDIT: Я нашел "обходной путь", я добавил параметр
ipcsv -delimiter "`t"
, но я получаю ошибки, когда я добавить параметр ConvertTo -CSV. Итак, теперь он экспортируется с разделителем ",". Но система, к счастью, умеет читать импорт, также разделенный запятой.
Спасибо, что работает отлично! Я «конвертировал» финальные скрипты в .exe, поэтому даже «манекены» должны иметь возможность использовать его. Но тогда Kaspersky Antivirus идентифицирует его как трояна, lol. Черт возьми. Возможно, я останусь с сценарием .ps1. EDIT: я использовал PS2EXE для «преобразования» сценария, если кто-то хочет знать .. – Shunator
Попробуйте вместо этого использовать PowerGUI (бесплатно), возможно, вы лучше обойдете Kaspersky. Должна быть какая-то белая система. – sodawillow