Jump to content
Ipfan

Powershell Inhalt von einer CSV bearbeiten

Recommended Posts

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?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites

Eine CSV ist ja auch nur eine Zeile in einem bestimmten Format.

Hier kannst du Zeilenweise durchgehen und diese so wie du willst bearbeiten. Das ist das einfachste.

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
@'
"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?  ;-)

Edited by BOfH_666
  • Like 2

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Ich danke euch wirklich sehr, dass ich in dieser kurzen Zeit so viele Antworten bekommen habe!
Das sollte mir sehr geholfen haben. Ich muss es nur erstmal alles verstehen :lool:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...