Как удалить символ NULL (0x00) из объекта в PowerShell

У меня есть файл .CSV, который я создал с помощью служебной программы BULK-COPY командной строки BCP SQL Server, чтобы сбросить кучу таблиц базы данных.

Поскольку я хочу импортировать эти файлы .CSV с помощью Powershell и преобразовать их в хороший отчет с помощью командлета format-table, у меня возникают проблемы с выравниванием столбцов и т. Д. потому что некоторые столбцы содержат NULL из SQL Server. У меня нет возможности сначала конвертировать NULL из SQL Server; из-за того, как я экспортирую таблицу в CSV.

Поэтому я хотел бы удалить все NULL из файла .CSV, прежде чем пытаться передать его в командлет format-table.

Мой базовый код приведен ниже:

$CSV=import-csv "c:\temp\tablename.csv" $CSV | format-table -autosize | out-string -width 4096 >"C:\TEMP\tablename.txt" 

Я попытался сделать что-то вроде:

 $CSV | -replace($null,"") | format-table -autosize | out-string -width 4096 > "C:\TEMP\tablename.txt" 

но я все еще получаю NULL.

Кто-нибудь знает, как удалить NULL из моего CSV, чтобы я мог отобразить хороший табличный отчет. Я хочу получить эти .TXT-отчеты, импортированные в SVN, но NULL вызовут у меня проблемы, а также перечеркивают отчеты.

CSV-файл, как показано в шестнадцатеричном редакторе:

 00000EA0h: 31 38 39 2C 31 31 39 2C 37 35 29 2C 77 68 69 74 189,119,75),whit 00000EB0h: 65 2C 77 68 69 74 65 2C 2C 2C 2C 2C 2C 2C 2C 2C e,white,,,,,,,,, 00000EC0h: 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C ,,,,,,,,,,,,,,,, 00000ED0h: 2C 2C 0D 0A 61 63 62 34 33 5F 30 31 2C 4F 4E 2C ,,..acb43_01,ON, 00000EE0h: 00 2C 32 37 2C 39 39 2C 2F 61 63 62 34 33 5F 30 .,27,99,/acb43_0 00000EF0h: 31 2F 34 33 62 61 6C 61 6E 63 65 73 2E 67 69 66 1/43balances.gif 

Обратите внимание, что в EE0h первый символ равен NULL, 0x00.

После немного поиграть, я наконец понял, что этот синтаксис работал:

 (Get-Content "C:\temp\tablename.csv") -replace "`0", "" | Set-Content "C:\temp\tablename.csv" 

Обновление. Теперь, когда я вижу, что вы подразумеваете под NULL (hex 0x00 ), я могу дать вам другой подход.

Вы можете просто отфильтровать этот байт, прочитав файл как двоичный:

 Get-Content "c:\temp\tablename.csv" -Encoding Byte | ? {$_ -ne 0x00} | Set-Content "c:\temp\tablename2.csv" -Encoding Byte 

Используйте '\ xnn' для сопоставления символов по шестнадцатеричному представлению:

 (get-content c:\temp\tablename.csv) -replace '\x00','' | set-content c:\temp\tablename.csv 

Все представленные ответы являются обходами и не затрагивают основную проблему, а именно, что powershell по умолчанию использует кодировку utf-16 (вот почему вы получаете NULL, то есть 0x00 между всеми символами). Решение состоит в том, чтобы сказать powershell, чтобы использовать utf-8:

$stuff | Out-File $out_path -Encoding UTF8

Смотрите также эту тему

Отправляясь от ответа Энди и вашего ответа, похоже, что «нулевое» значение, которое вы хотите избавиться, на самом деле «00» в тексте.

Поэтому вы хотите сделать это вместо этого:

 (Get-Content "C:\temp\tablename.csv") -replace " 00 ", " " | Set-Content "C:\temp\tablename.csv" 

Это будет конвертировать:

00000EE0h: 00 2C 32

в:

00000EE0h: 2C 32

 -replace "`0", " " 

Это очень сработало для меня в текстовом файле.

  • Создайте пакет Nuget для сценария Dacpac и Powershell
  • Определить, существует ли класс wmiobject для заданного пространства имен
  • Создайте пользователя SQL Server с помощью Powershell
  • XML-данные, входящие в новую строку, используя команду invoke-sql в powershell
  • Добавление серверов в SQL Management Studio
  • Как я могу вызвать хранимую процедуру SQL Server из PowerShell?
  • SQL: запрос для установки значения на основе параметра группы
  • Как выполнить файл .sql с помощью powershell?
  • SQL Azure и Powershell для развертывания DACPAC
  • Как добавить даты в записи базы данных для анализа тенденций
  • Как отформатировать вывод SQLCMD
  • Interesting Posts

    Открытие больших файлов CSV?

    Как выводить исходный XML-объект в XML-проекцию в SQL Server без введения дополнительного корневого элемента xml

    как скопировать данные из одной таблицы в другую, с изменением идентификатора и id <> parentid отношения остаются правильными?

    Обновить таблицу со случайным числом DECIMAL в пределах диапазона (SQL Server)

    Как вы отправляете списки значений в операторе выбора SQL Server программным способом с хорошей точки зрения?

    Измените свободное пространство базы данных после удаления большого количества данных

    Реализация массивного поискового приложения

    объединить 2 столбца из 2 таблиц в одну колонку

    Ошибка арифметического переполнения, преобразующая числовые данные в тип данных varchar. при прохождении большого разнообразия дат

    SQL ORDER В столбце последовательности затем все записи в группе, а затем возобновить следующую последовательность

    Хранимая процедура завершается с ошибкой, поскольку CONCAT_NULL_YIELDS_NULL неверен

    Может ли SQL Server Indexed View обслуживаться с удаленного сервера

    Хорошие методы или учебники для понимания JOINs в SQL

    SQL Server «В» против «меньше»,

    Как сформировать заявление SELECT для MS SQL Server для заполнения конкретной VIEW с помощью строки EMPTY на основе условия

    Давайте будем гением компьютера.