Leider war ich mir nicht sicher, wie ich die Frage formulieren sollte.Ändern der Ausgabe mit exportierten Excel/CSV-Daten, wenn innerhalb von 'foreach' Nullwerte gefunden werden
Dies ist ein Follow-on aus einer früheren Frage hier: Take Excel cell content and place it into a formatted .txt file
Die Funktion Import-XLS ich benutze hier ist: https://gallery.technet.microsoft.com/office/17bcabe7-322a-43d3-9a27-f3f96618c74b
Mein aktueller Code sieht wie folgt aus:
. .\Import-XLS.ps1
$OutFile = ".\OutTest$(get-date -Format dd-MM).txt"
$Content = Import-XLS '.\DummyData.xlsx'
$Content | foreach-object{
$field1 = $("{0},{1},{2},{3},{4},{5},{6}" -f "Field1", $_."Value1", $_."Value2", $_."Value3", $_."Value4", $_."Value5", $_."Value6")
$field1.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries) -join ","
$field2 = $("{0},{1}" -f "Field2", $_."Value1")
$field2.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries) -join ","
} | Out-File $OutFile
Mein Dummydata ist im wesentlichen das (ich habe null eingefügt $ die Leerwerte, darauf hinzuweisen)
Entries Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8
Entry 1 1 2 $null 4 5 6 7 8
Entry 2 $null B A B A B A B
So habe ich es geschafft, den Code 'Ignorieren/Überspringen' einen Nullwert innerhalb eines Satzes.
Meine Ausgabe sieht wie folgt aus
Field1,1,2,4,5,6
Field2,1
Field1,B,A,B,A,B
Field2
Was würde ich Hilfe gerne mit nun, wie entweder entfernen „Field2“, weil es keinen Wert hat, oder kommentieren Sie mit;.
So würde meine Ausgabe aussehen
Field1,1,2,4,5,6
Field2,1
Field1,B,A,B,A,B
oder
Field1,1,2,4,5,6
Field2,1
Field1,B,A,B,A,B
;Field2
Wesentlichen, wenn eine Zeile keine Daten in irgendetwas davon hat den Feldern, die für diese Zeile geschrieben werden, sollte es ignoriert werden .
Vielen Dank für Ihre Hilfe.
EDIT:
Ich habe entdeckt, ich brauche das Komma "" zwischen dem {0}, {1} zu entfernen und stattdessen einen Raum nutzen. So verwende ich
$field2 = $("{0} {1}" -f "Field 2", $_."Value1")
$field2 = $field2.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)
if ($field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }
Welche funktioniert für "die meisten" meiner Felder.
Allerdings gibt es einige Felder und Werte, die Leerzeichen enthalten. Zusätzlich gibt es einige Werte wie "TEST TEXT"
So, jetzt bin ich immer
Field1 3,B,A,B,A,B
Field 2 TEST TEXT
statt (Angebote für Klarheit)
"Field1" 3,B,A,B,A,B
"Field 2" "TEST TEXT"
Ich bin glücklich, eine Art einfach zu bedienen Ausnahme nur für diese wenigen Felder. Ich habe ein paar andere Dinge versucht, aber ich am Ende brechen die IF-Anweisung, und es, Kommentare Felder mit Werten, oder nicht, kommentieren Sie Felder ohne Werte.
Sie brauchen also nur eine einfache 'If' Aussage? 'If ($ _. Value1) {$ Field2.Split ...' – TheMadTechnician