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

Geschrieben

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?

Geschrieben

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.

  • Like 1
Geschrieben
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!

Geschrieben

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++
}

 

  • Like 1
Geschrieben (bearbeitet)
@'
"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
  • Like 2
Geschrieben

Schön aneinandergereiht dann so:

$Data = Import-Csv -Path "C:\Users\user\Desktop\Test.csv" -Delimiter ';' | ForEach-Object { $_.Vorname = 'AA' + $_.Vorname; $_ } | ConvertTo-Csv -NoTypeInformation -Delimiter ';'
Out-File "C:\Users\user\Desktop\Test1.csv" -InputObject $Data

 

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...