Jump to content

Powershell Inhalt von einer CSV bearbeiten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

ich möchte über Powershell eine CSV importieren, diese filtern und leicht verändern, bevor ich diese wieder als CSV exportiere.

Das Vorgehen ist bisher auch kein Problem, nur das ich die CSV nicht verändert bekomme.

Folgende Schritte führe ich durch:

$csv = Import-Csv -path '.\test.csv' -Encoding UTF8 -Delimiter "`t" | Select * -Exclude "Name","Vorname","Strasse","PLZ","Ort"

 

Im weiteren Schritt muss ich die Kundennummer abrufen und hier den Wert "AA-" voranstellen, sodass aus der Nummer "123456" "AA-123456" wird.

Ich habe gedacht, dass man dies mit folgenden Befehl mache kann:

for ($i=0; $i -lt $csv.length; $i++){csv[$i]="AA-" + $csv[$i]}

 

Ich habe natürlich noch diverse andere Wege probiert, aber diesen Befehl mal als Beispiel.

Mittlerweile habe ich keine weiteren Lösungswege mehr, da ich in Powershell noch ein Anfänger bin.

 

Abschließend muss ich dies natürlich noch exportieren, aber dies sollte natürlich kein Problem darstellen.

 

Hat vielleicht von euch einer eine Idee?

Link zu diesem Kommentar
vor 21 Minuten schrieb Dukel:

Ich meine das geht mit CSV nicht und du musst entweder ein temporäres CSV erstellen oder das mit einem PSObject machen.

 

Wieso willst du das mit CSV machen? Wenn du das Zeilenweise bearbeitest bekommst du das hin, wie du willst.

Die Quelldatei ist eine CSV und muss etwas modifiziert werden. Anschließend muss diese wieder als CSV exportiert werden, weil diese im nächsten Schritt automatisiert von einem weiteren System verarbeitet wird.

Die anderen Verarbeitungsschritte habe ich mir hier bewusst gespart, da diese bereits funktionieren.
Ich hänge nur daran, dass die Kundennummer immer mit einem Präfix versehen werden muss.

 

Kannst du mir deinen Ansatz mit dem PSObject vielleicht noch näher beschreiben?

 

Vielen Dank für die Antwort!

Link zu diesem Kommentar

Habe das, weil das auch nicht so trivial ist, zusammengebaut:

 


Beispieldatei:
PS C:\> Get-Content C:\temp\test.csv
"Name","Vorname","Kundennummer","PLZ","Ort"
"Dukel","Foo","123456","1234","Musterort"
"Ipfan","Bar","098765","5678","Musterhausen"

Script:

$i = 0

foreach($line in (get-content C:\temp\test.csv)){

   if($i -eq 0){ # Alternativ: "-lt 1", dabei können mehr Zeilen unbearbeitet bleiben
      # Unsere Headerzeile
      $ausgabe = $line
   }else{

      # wir schreiben jede Zeile in eine Variable $line
      $null = $line.IndexOf(',')
      # Das erste Komma. Sprich unser erstes Feld (was wir ignorieren)
      $null = $line.IndexOf(',',($line.IndexOf(',')+1))
      # Das zweite Komma. Hier fangen wir mit dem Index bei einer Zeile nach dem ersten Komma an.

      $vorher = $line.Substring(0,$line.IndexOf(',',($line.IndexOf(',')+1))+2)
      # Wir teilen die Zeile in ein vor der Kundennummer auf. Hier nutzen wir den Index vom zweiten Komma und zählen noch Zwei Zeichen (,") dazu

      $nachher = $line.Substring($line.IndexOf(',',($line.IndexOf(',')+1))+2)
      # Das selbe für den Bereich nach der Kundennummer

      $ausgabe = $vorher + "AA-" + $nachher

   }   

   $ausgabe | add-content C:\Temp\new.csv

  $i++
}

 

Link zu diesem Kommentar
@'
"Name","Vorname","Kundennummer","PLZ","Ort"
"Dukel","Foo","123456","1234","Musterort"
"Ipfan","Bar","098765","5678","Musterhausen"
'@ | ConvertFrom-Csv -Delimiter ',' |
    Select-Object -Property Name,Vorname,PLZ,Ort,
        @{Name = 'Kundennummer'; Expression = {'AA-'+ $_.Kundennummer}}

... und sowas reicht nicht aus?  ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...