Fügen Sie Anführungszeichen, um jede Spalte in einer CSV per Powershell
Ich versuche, erstellen Sie ein Powershell-Skript, das die wraps Anführungszeichen um die einzelnen Spalten der Datei auf exportieren, um CSV. Aber der Export-CSV-applet einzigen Orte, wo Sie gebraucht werden, d.h. wo der text ein Leerzeichen oder ähnliches in Ihr.
Ich habe versucht, verwenden Sie die folgende, um wickeln Sie die Zitate auf jeder Linie, aber es endet Verpackung drei Zitate, die auf jeder Spalte.
$r.SURNAME = '"'+$r.SURNAME+'"';
Ist jemand in der Lage zu teilen, wie diese Kräfte auf die einzelnen Spalten der Datei - so weit kann ich gerade Infos zu finden auf Strippen Sie diese heraus.
Dank
- Meine Erfahrung mit PowerShell 4, wenn Sie an einer Datei durch
Import-CSV
und exportieren Sie Sie dann wieder aus mitExport-CSV
, es ergibt immer doppelte Anführungszeichen Feld-IDS für jedes Feld. Es mag albern sein, aber nach dem ersten export, laufenImport-Csv $file | Export-Csv $file -NoTypeInformation -Force
könnte fix das zitieren Problem automatisch für Sie. - Diese immer noch nur Blätter, die Anführungszeichen um die Werte mit Leerzeichen oder anderen Sonderzeichen. Es sieht aus wie ich haben nur Zugang zu Powershell V1, die möglicherweise Teil des Problems.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie auch den folgenden code verwenden:
Vielleicht ein besserer Ansatz wäre es, einfach zu konvertieren CSV (nicht exportieren) und dann eine einfache regex-Ausdruck hinzufügen könnte, die Zitate dann pipe es heraus, um Datei.
Vorausgesetzt, Sie exportieren das gesamte Objekt
$r
:Den
Select -Skip 1
entfernt den header. Wenn Sie möchten, dass die Kopfzeile nur nehmen Sie es heraus.Zu klären, was die regex-Ausdruck ist zu tun:
Spiel:
,(.*?),
Erläuterung: Diese entsprechen der jeweiligen Zeile mit einem Komma, gefolgt von einer beliebigen Anzahl von Zeichen (
.*
), ohne gierig (?
: im Grunde bedeutet, es wird nur die minimale Anzahl an Zeichen, die benötigt wird, um die komplette übereinstimmung) und die schließlich endete mit einem Komma. Die Klammern halten alles, was zwischen zwei Kommata in einem match Variablen werden später verwendet ersetzen.Ersetzen:
,"$1",
Erklärung: Die
$1
hält das match zwischen den beiden Klammern oben erwähnt in das match. Ich bin, um es mit Zitaten und re-hinzufügen von Kommas da ich die abgestimmten als auch diejenigen, müssen Sie ausgetauscht werden oder Sie sind einfach verbraucht. Bitte beachten Sie, dass während der match-Teil des-replace
können doppelte Anführungszeichen ohne ein Problem, die ersetzen Abschnitt werden müssen, umgeben von einfachen Anführungszeichen oder die$1
bekommt, interpretiert PowerShell eine PowerShell-variable und nicht ein match-variable.',^"(.*?)^",'
. Wie bei der ersten und letzten Spalten, könnten Sie schreiben, eine super komplizierte regex-Ausdruck zu handhaben es alle oder nur senden die Ergebnisse an die erste Stelle in eine andere ersetzen, die Griffe, insbesondere die ersten und letzten Spalten.Export-Csv
und einfach akzeptieren, so wie Sie es tut. Sie könnenConvertTo-Csv
und verwenden Sie dann regex zu ändern, um Ihre Herzen Inhalt.| % { $_ -replace ',\"?(.+?)\"?,', ',"$1",' }
Ich habe betrogen, das zu bekommen was ich will, durch erneutes Parsen der Datei durch den folgenden - denke mal, dass es wirkt, als ein einfaches suchen und ersetzen auf die Datei.
Danke für die Hilfe auf dieser.