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-ID: 445957

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

Ausgedruckt am: 22.11.2024 um 00:11 Uhr

139374
Lösung 139374 30.04.2019 aktualisiert um 12:31:42 Uhr
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
erikro
Lösung erikro 30.04.2019 um 12:12:45 Uhr
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
SomebodyToLove
SomebodyToLove 30.04.2019 um 13:50:25 Uhr
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