So entfernen Sie NULL-Zeichen (0x00) vom Objekt in PowerShell
Habe ich eine .CSV-Datei, die ich erstellt mithilfe von SQL Server-Befehl BCP-line BULK-COPY-Dienstprogramm dump eine Reihe von Datenbank-Tabellen.
Da ich möchte, um diese zu importieren .CSV-Datei mit Powershell zu konvertieren und Sie zu einem netten Bericht über das cmdlet format-table, habe ich Probleme mit Spalten, Schlange, etc,. da einige Spalten enthalten, die Null-Werte aus SQL Server. Ich habe nicht die option zum konvertieren der NULL von SQL Server zuerst; aufgrund der Art, wie ich bin, exportieren Sie die Tabelle in CSV.
Daher möchte ich entfernen Sie alle Null-Werte aus .CSV-Datei, bevor Sie versuchen zu Rohr in das cmdlet format-table.
Mein basic-code ist unten:
$CSV=import-csv "c:\temp\tablename.csv"
$CSV | format-table -autosize | out-string -width 4096 >"C:\TEMP\tablename.txt"
Habe ich versucht, etwas zu tun wie:
$CSV | -replace($null,"") | format-table -autosize | out-string -width 4096 > "C:\TEMP\tablename.txt"
aber ich bin noch immer die Null.
Weiß jemand wie das entfernen der Null-Werte aus der CSV, so kann ich die Anzeige einer schönen tabellarischen Bericht. Ich möchte, um diese zu erhalten .TXT importierte Berichte in SVN, aber die werden Null-Werte verursachen mir Probleme, und es verzerrt die Berichte.
CSV-Datei, wie gezeigt, in einem hex-editor:
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
Hinweis auf EE0h das erste Zeichen ist NULL, 0x00.
sql-server
tag war sehr irreführend, so dass ich geändert, den Titel leicht zu entfernen die Mehrdeutigkeit. Ich bin mir nicht sicher, ob es klingt nicht unbeholfen oder ungeschickt jetzt, also bitte fühlen Sie sich frei, um es zu Bearbeiten wieder, wie Sie sehen, passen.InformationsquelleAutor user500741 | 2012-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach ein bisschen Herumspielen habe ich endlich herausgefunden, dass diese syntax funktioniert:
InformationsquelleAutor user500741
Alle eingereichten Antworten sind Workarounds und berücksichtigen nicht die zentrale Frage, die ist, dass powershell verwendet die utf-16-Codierung standardmäßig (dies ist, warum Sie immer NULL, d.h. 0x00 zwischen allen Zeichen). Die Lösung ist zu sagen, powershell-die Verwendung von utf-8:
$stuff | Out-File $out_path -Encoding UTF8
Siehe auch dieser thread
Danke ! Ich hatte ein ähnliches problem mit einer npm-parser, obwohl der auto-generierten xml-Code wurde eingestellt, um <?xml version="1.0" encoding="UTF-8"?> auf den Zeitpunkt der Erstellung, ausführen der oben genannten Feste der nicht-weißen Zeichen, die in meinem hex-Ansicht. Und sicher der bessere Weg als das ersetzen einzelner Zeichen.
InformationsquelleAutor user2426679
Update - Jetzt, wo ich sehe, was du meinst, die von NULL (hex
0x00
) kann ich Ihnen einen anderen Ansatz.Können Sie nur filter aus diesen byte-durch das Lesen der Datei als binary wie diese:
--Sorry, ich habe versucht, die Bearbeitung der ursprünglichen Frage und kann nicht scheinen, um die Formatierung zu bleiben, im blockierenden Modus.
Vergessen Sie nicht, es ist nur text, so was auch immer die wörtliche text, den Sie entfernen möchten, ist, was Sie verwenden, da das erste argument der
-replace
Betreiber. Ich änderte meine Beispiele ein wenig, so können Sie leichter sehen.Danke für die Antwort -- der absolute Wert, wenn es bei der Suche in nicht druckbare. Versucht, es wurde "00" funktioniert auch nicht. Der hex-dump, die ich angegeben habe, zeigt es als 0x00 und der ASCII-Seite, es zeigt, wie ein nicht druckbare Zeichen mit einem ".".
InformationsquelleAutor Andy Arismendi
Verwenden Sie '\xnn', um auf übereinstimmung Charaktere durch Ihre hex-Darstellung:
InformationsquelleAutor mjolinor
Dieser arbeitete für mich in eine text-Datei einfach in Ordnung.
InformationsquelleAutor psstarkey
Geht aus Andy ' s Antwort und Ihrer Antwort, es sieht aus wie die 'null' - Wert, den Sie möchten, um loszuwerden, ist eigentlich "00" im text.
Also würden Sie dies tun möchten, statt:
Dies wird zu konvertieren:
00000EE0h: 00 2C 32
in:
00000EE0h: 2C 32
InformationsquelleAutor Huon Imberger