somebodytolove
Goto Top

PowerShell CSV File nach ersten oder zweiten Wort abschneiden

Hallo zusammen,

ich stehe gerade ziemlich auf dem Schlauch und hoffe mir kann jemand helfen....

Ich habe eine CSV File welche folgenden Inhalt hat:

Artikelnummer, Bezeichnung
100, Erste Bezeichnung XYZ
101, Zweite Lange Bezeichnung XYZ XYZ
102, Dritte Bezeichnung XYZ
103, Vierte Weitere Bezeichnung Text Text

Jetzt möchte ich mir ein PowerShell Script erstellen welches die CSV File einliest und immer alles nach dem ersten Wort abschneidet, aber wenn gewisse Schlagwörter da sind wie "Lange", "Weitere" soll es die erst ab dem zweiten oder Dritten Wort den Text abschneiden.

Erwünschtes Ergebnis wäre dann so:

Artikelnummer, Bezeichnung
100, Erste
101, Zweite Lange
102, Dritte
103, Vierte Weitere Bezeichnung

Aber ich bekomme es einfach nicht hin.... Könnte mir vielleicht jemanden einen Hinweis geben nach was ich da suchen muss?
Alles was ich bisher gefunden habe hat mir leider nicht so richtig weitergeholfen :/

Vielen Dank schon mal falls mir jemand helfen kann.

Grüße
Somebody

Content-Key: 445957

Url: https://administrator.de/contentid/445957

Printed on: April 23, 2024 at 09:04 o'clock

Mitglied: 139374
Solution 139374 Apr 30, 2019 updated at 10:31:42 (UTC)
Goto Top
Einfache Split und nen switch für die Bedingungen benutzen.
$csv = Import-CSV "D:\pfad\datei.csv" -Delimiter ","  

foreach($row in $csv){
    $words = $row.Bezeichnung -split '\s+'  
    switch -Wildcard ($row.Bezeichnung){
        "*Zweite*" {$row.Bezeichnung = $words[0..1] -join ' '}  
        "*Vierte*" {$row.Bezeichnung = $words[0..2] -join ' '}  
        default {$row.Bezeichnung = $words}
    }
}
# hier mach was mit dem geänderten object
$csv
Member: erikro
Solution erikro Apr 30, 2019 at 10:12:45 (UTC)
Goto Top
Moin,

das macht das, was Du willst (getestet):

PARAM (

    $inputfile = "test.csv",  
    $outputfile = "testneu.csv"  

)

$data = Import-Csv $inputfile -Delimiter ","  
[regex]$regex1 = "^.*Lange.*$"  
[regex]$regex2 = "^.*Weitere.*$"  
foreach($dataset in $data) {

    $i = 0
    if($dataset.Bezeichnung -match $regex1) {

        $i = 1

    }
    elseif($dataset.Bezeichnung -match $regex2){

        $i = 2

    }
    
    $split = $dataset.Bezeichnung.split(" ")  

    $k=0
    $new = ""  
    while($k -le $i) {

        $new = $new + $split[$k] + " "  
        $k++
    }
    $new.trimend(" ")  
    $dataset.Bezeichnung = $new
    $dataset |export-csv $outputfile -delimiter "," -encoding utf8 -append -force  
}

hth

Erik
Member: SomebodyToLove
SomebodyToLove Apr 30, 2019 at 11:50:25 (UTC)
Goto Top
Tausend Dank euch beiden,

ihr habt mir tatsächlich die Fertige Lösung präsentiert face-smile

Ich muss es jetzt noch ein wenig für meine Bedürfnisse anpassen, da ich nach mehreren Schlagwörtern filtern muss, aber das sollte ich hinbekommen face-smile

vielen vielen Dank