focus1610
Goto Top

Einen bestimmten Teil einer Textdatei auslesen

Hallo,

ich brauche mal einen Denkanstoß.

Ich bekomme per FTP von einem Kunden täglich mehrere Textdateien. Diese haben unterschiudlich viele Zeilen.

Jede Zeile fängt aber mit einem 3stelligen Code an. Dadurch kann ich identifizieren in welcher Zeile ich schauen muss.

Ich muss jetzt immer in den Zeilen die mit dem Code "613" anfangen schauen welcher Wert zwichen den Zeichen 70 - 71 drin steht.
Dieser kann allerdings auch leer sein. Dann brauche ich halt den "leeren" wert.

Wie kann ich diesen nun am besten in Array schreiben.
$ordnerpfad = "x:\"  
cd X:
$datein = Get-ChildItem -Path $ordnerpfad -filter FORD*

foreach($i in $datein)
{
$meldungpath=$ordnerpfad + $i.Name



    $ladung = Get-Content -Path $meldungpath
$pattern= "613"  
$meldungzeile = Select-String -path $meldungpath -pattern $Pattern | ft LineNumber

Dadurch habe ich die Zeilennummer welche mit 613 anfangen.

Aber irgendwie stehe ich nun auf dem Schlauch wie ich denn nun den angesprochenen Wert auslesen.

Je nach Wert muss ich bestimmte Aktionen durchführen. Ich benötigen den Wert also in einem Array.

Hat jemand einen Denkanstoß für mich?

Danke Gruß

Focus1610

Content-Key: 279273

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: 122990
Lösung 122990 05.08.2015 aktualisiert um 13:52:22 Uhr
Goto Top
Moin,
as simple as this...
# leeres Array erzeugen
$array = @()

gci 'X:\FORD*' | %{  
    $result = (gc $_.Fullname) | ?{$_ -match '^613'} | %{$_[69..70] -join ''}  
    # Je nach Wert entscheiden was zu tun ist
    switch($result){
        'AA' {write-host "Tu was bei 'AA'"}  
        'BB' {write-host "Tu was bei 'BB'"}  
        default {write-host "Tu was bei sonstigen Werten"}  
    }
    # Wert dem Array hinzufügen
    $array += $result
}
Gruß grexit
Mitglied: Focus1610
Focus1610 05.08.2015 um 13:39:42 Uhr
Goto Top
Hallo Gexit.

Genau so habe ich mir das vorgestellt. Funktioniert super.....

Vielen Vielen Dank.

Jetzt kann ich weiter machen....

Aber nur zu meinem Versändnis.

Die Variable $array brauche wir jetzt doch eigentlich nicht mehr,oder? Denn ich packe meine "Tu was bei 'AA'" ja unter Switch.
Das hatte ich eigentlich vor mit dem Array zu tun.

Also brauche ich die Variable $array nicht , oder??

Danke nochmals.

Gruß
Focus1610
Mitglied: 122990
122990 05.08.2015 aktualisiert um 13:43:37 Uhr
Goto Top
Zitat von @Focus1610:
Also brauche ich die Variable $array nicht , oder??
Nicht unbedingt, wenn du die Werte hinterher nicht brauchst lass den Teil einfach weg.
Mitglied: Focus1610
Focus1610 05.08.2015 um 21:09:19 Uhr
Goto Top
Hallo Grexit.

Ich bin ex nochmal. Kannst Du mir noch einmal helfen.

Meine TextDatei, die ich bekomme hat mehrere Zeilen:

1. Zeile 611.......
2. Zeile 612.......
3. Zeile 613.......
3. Zeile 615.......
4. Zeile 612.......
5. Zeile 613.......
6. Zeile 614.......
7. Zeile 615.......
usw usw

Es können auch mal nur bis zu Zeile 3 gehen. es kann auch elendig lang werden...

Die Zeilen 612 und 613 und 615 ergeben immer ein Block und gehören zusammen.

Nun muss ich wie oben beschrieben in der Zeile 613 die 70 und 71 Stelle prüfen ob ein Wert drin steht und entsprechende Aktionen durchführen.

Das funktioniert mit deinem Code auch wunderbar.

Aber ich muss aus diesem "Paket" in meinen Aktionen auch noch einen Wert auslesen.

Diese beiden Werte sollen dann in eine CSV Datei exportiert werden.

Hier mein Code dafür:

  gci 'X:\FORD*' | %{$result = (gc $_.Fullname) | ?{$_ -match '^613'} | %{$_[69..70] -join ''}  
    gci 'X:\FORD*' | %{ $vin = (gc $_.Fullname) | ?{$_ -match '^612'} | %{$_[32..48] -join ''}}   

    # Je nach Wert entscheiden was zu tun ist
   
    switch($result){
       'AA' {$row = New-Object PSObject -Property @{  
     Fahrgestellnummer = "$vin"  
     delay = "$result"}  
    $row | Export-Csv C:\Users\fbook\Documents\test.csv -notypeinformation -append
              }
      'BB' {  
     $row = New-Object PSObject -Property @{
     Fahrgestellnummer = "$vin"  
     delay = "$result"}  
     
     $row | Export-Csv C:\Users\fbook\Documents\test.csv -notypeinformation -append
     }
     
     
    default {
    $row = New-Object PSObject -Property @{
     Fahrgestellnummer = "$vin"  
     delay = "leer"}  
     
     $row | Export-Csv C:\Users\fbook\Documents\test.csv -notypeinformation -append
    }}
    # Wert dem Array hinzufügen
    }

Leider ist das Ergebnis ernüchtert. Denn es wird in die CSV Datei nur der allerletzte gefundenen Datensatz ($result" ist leer) exportiert.

Kannst Du mal schauen, wo ich einen Fehler habe.

Vielen Dank.

Gruß

Focus1610
Mitglied: 122990
Lösung 122990 06.08.2015, aktualisiert am 18.08.2015 um 11:51:32 Uhr
Goto Top
Ist ja auch kein Wunder ... Du setzt die Variable $result innerhalb der Foreach-Schleife immer wieder neu deswegen hast du am Ende auch nur das letzte Element darin face-wink