none
Powershell select-object aus einem Block einen Teil in eine Variable schreiben

    Frage

  • Hallo Zusammen,

    ich komme einfach nicht drauf. 

    Ich habe eine riesige Datei > 500k Einträge die in Blöcken aufgebaut ist.

    Hier muss ich nun einen Block finden und in dem Block wieder ein gewisse Zeile und dort hinter einem Zeichen die Zahl in eine Variable schreiben.

    die Datei ist so aufgebaut.  Hier sind 2 Blöcke Grossbritanien und Frankreich, davon habe ich noch ein paar tausend im gleichen Aufbau.

    Grossbritanien:

    Hauptstadt = London

    Landeskürzel = GB

    Währung = Pfund

    Sehenswürdigkeiten = 31495

    Frankreich:

    Hauptstadt = Paris

    Landeskürzel = F 

    Währung = Euro

    Sehenswürdigkeiten = 22716


    Nun benötige ich die Zahl hinter der Sehenswürdigkeit von Frankreich in einer Variable.

    Was ich habe ist:

    $OUTPUT = $test = Select-String -path .\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 

    aber hier erhalte ich nur die 5 Zeilen des Blocks Frankreichs, wie bekomme ich nun die Zahl 22716 in den $OUTPUT ?

    Mit Reg Exp geht es irgendwie, ich denke da an sowas Frankreich*Sehenswürdigkeiten = .

    tausend Dank

    Donnerstag, 6. Dezember 2018 12:23

Antworten

  • Probier ma das hier:

    $OUTPUT = ((Select-String -path D:\sample\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 | 
        Select-Object -ExpandProperty Context | 
            Select-Object -ExpandProperty PostContext)[3] -split "=")[1]

    Formatierst Du bitte in Zukunft Deinen Code als Code? Danke.

    Achso ... das ist natürlich noch keine richtige "Zahl"!  ... Du musst noch die eventuell vorhandenen Leerzeichen "weg-trimmen" und den String in z.B. ein Integer umwandeln.  ;-)

    Edit:  ... sieht dann ungefähr so aus ... wenn die Zahlen immer "kleine" Integer-Zahlen sind:

    $OUTPUT = [INT]((Select-String -path D:\sample\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 | 
        Select-Object -ExpandProperty Context | 
            Select-Object -ExpandProperty PostContext)[3] -split "=")[1].trim()


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''



    Donnerstag, 6. Dezember 2018 12:59

Alle Antworten

  • Probier ma das hier:

    $OUTPUT = ((Select-String -path D:\sample\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 | 
        Select-Object -ExpandProperty Context | 
            Select-Object -ExpandProperty PostContext)[3] -split "=")[1]

    Formatierst Du bitte in Zukunft Deinen Code als Code? Danke.

    Achso ... das ist natürlich noch keine richtige "Zahl"!  ... Du musst noch die eventuell vorhandenen Leerzeichen "weg-trimmen" und den String in z.B. ein Integer umwandeln.  ;-)

    Edit:  ... sieht dann ungefähr so aus ... wenn die Zahlen immer "kleine" Integer-Zahlen sind:

    $OUTPUT = [INT]((Select-String -path D:\sample\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 | 
        Select-Object -ExpandProperty Context | 
            Select-Object -ExpandProperty PostContext)[3] -split "=")[1].trim()


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''



    Donnerstag, 6. Dezember 2018 12:59
  • Hmmmm .... irgendwas mach ich wohl was falsch ... ich geb mir Mühe, jemandem so schnell wie möglich zu helfen, aber ich krieg irgendwie immer keine Rückmeldung ...  :-/

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Sonntag, 9. Dezember 2018 16:52
  • Sorry sorry sorry, vielen lieben Dank, das hat tatsächlich super funktioniert.

    Ich habs noch etwas umgebaut. Aber soweit tiptop!

    Viele Grüsse 

     
    Sonntag, 9. Dezember 2018 18:01
  • Cool .... dann bin ich ja froh, dass ich helfen konnte.  :-D

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Sonntag, 9. Dezember 2018 22:13