none
Textdatei einlesen und bearbeiten RRS feed

  • Frage

  • Hallo Leute,

    habe mal wieder ein Problem. Ich habe den Auftrag eine Textdatei zu analysieren und nach entsprechenden Vorgaben zu verändern und wieder abzuspeichern. Die Quell Dateien können dabei immer anderst aussehen.

    Hier ein Bild von den Testdateien:


    Diese sollen eingelesen werden und nach folgenden Vorgaben bearbeitet werden.

    Variable1 soll auf 3 gesetzt werden.
    Variable2 soll auf 2 stehen
    Text soll gelöscht werden egal ob 3 oder 4

    Thema soll auf 5 gesetzt werden 

    mit get-content kann ich mir die gesamte Datei einlesen und mit einer foreach schleife müsste ich dann zeile für zeile analysieren aber dann hörts bei mir auf weil ich muss ja eigentlich jede variabel(wert) prüfen was für ein wert dahinter steht und gegebenenfalls abändern.

    Könnt ihr mir bitte helfen. Hab mit Textanalyse noch nicht gearbeitet und soll das relativ schnell realisiert haben.

    Please help me ;-)


    • Bearbeitet Horter Freitag, 17. Februar 2017 11:51
    Freitag, 17. Februar 2017 11:50

Antworten

  • Wenn das Schema immer so ist wie oben, also <Bezeichnung>=<Wert> ist das relativ einfach.
    Was du für jede Zeile machen musst ist folgendes:

    • - Zeile lesen
    • - Wert ermitteln
    • - Wert ersetzen
    • - geänderte Zeile neu schreiben

    Also innerhalb deiner Schleife z.b.  $wert = $Zeile.Split("=")[1] . Den kannst du dann innerhalb der Zeile mit $zeile.replace($wert,$neuerwert) ersetzen und die gesamte Zeile neu schreiben.
    Welcher Wert mit welchem zu ersetzen ist kannst du z.b. feststellen indem du die Schleifendurchgänge zählst.

    Wenn es sich nicht nur um 4 Pärchen und kurze Zeichenfolgen handelt wie im Screenshot, würde man aber ganz anders und etwas professioneller vorgehen, indem man dann je nach Bezeichnung den neuen Wert z.b. in einem Custom Array oder Dictionary Object nachschlagen würde.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 17. Februar 2017 12:19
    Moderator
  • Hallo,

    -replace unterstützt Reguläre Ausdrücke. Wenn du möchtest, dass der Text ab Zeilenbeginn gesucht wird (und nicht irgendwo in der Zeichenkette), dann musst du nach "^Cache=" suchen.

    Viele Grüße

    Christoph

    Montag, 20. Februar 2017 10:37

Alle Antworten

  • Hi,

    schau doch mal in diesen Beitrag derzeit direkt unter deinem, könnte auch dir helfen.

    https://social.technet.microsoft.com/Forums/de-DE/c64d7f78-66d2-409d-a533-bbd9f539ab81/mehrere-zeilen-in-einer-datei-ersetzen?forum=powershell_de

    Beste Gruesse
    brima

    Freitag, 17. Februar 2017 12:17
  • Wenn das Schema immer so ist wie oben, also <Bezeichnung>=<Wert> ist das relativ einfach.
    Was du für jede Zeile machen musst ist folgendes:

    • - Zeile lesen
    • - Wert ermitteln
    • - Wert ersetzen
    • - geänderte Zeile neu schreiben

    Also innerhalb deiner Schleife z.b.  $wert = $Zeile.Split("=")[1] . Den kannst du dann innerhalb der Zeile mit $zeile.replace($wert,$neuerwert) ersetzen und die gesamte Zeile neu schreiben.
    Welcher Wert mit welchem zu ersetzen ist kannst du z.b. feststellen indem du die Schleifendurchgänge zählst.

    Wenn es sich nicht nur um 4 Pärchen und kurze Zeichenfolgen handelt wie im Screenshot, würde man aber ganz anders und etwas professioneller vorgehen, indem man dann je nach Bezeichnung den neuen Wert z.b. in einem Custom Array oder Dictionary Object nachschlagen würde.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 17. Februar 2017 12:19
    Moderator
  • Hmm ja nur sind die Textdateien nur exemplarisch. Die Reihenfolge der Variabelen ist eben leider nicht immer die gleiche. Jedoch steht eigentlich immer Variable=Wert.

    Hmm finde irgendwie keinen Anfang.

    Freitag, 17. Februar 2017 13:17
  • Ok,
    woher bekommst du die zu ersetzenden Werte, also die "Vorgaben" für die Änderungen? In welchem Format etc.

    > Jedoch steht eigentlich immer Variable=Wert.

    Das ist grundlegend wichtig. Also eigentlich immer oder immer?

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 17. Februar 2017 13:43
    Moderator
  • Hi,

    die Werte die ersetzt bzw. geändert werden sollen stehen in einem FAQ bzw. in einer TXT Datei.

    Dort steht dann auch wieder Variable=Wert.

    Montag, 20. Februar 2017 06:04
  • Ich denke, die Frage zielte eher in die Richtung, ob die Datei immer das gleiche Format hat - die Variable=Wert - Paare z.B. immer in der gleichen Zeile stehen, oder wenigstens immer in der gleichen Reihenfolge und auch immer alle vollständig vorhanden sind usw. usf. ....  

    Erstellst Du die Datei? Oder hast Du Kontrolle über das Format und kannst es evtl. sogar (in Deinem Sinne) beeinflussen?


    Grüße - Best regards

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


    • Bearbeitet BOfH-666 Montag, 20. Februar 2017 07:13 Tippfehler korrigiert
    Montag, 20. Februar 2017 07:13
  • Hi ,

    ne leider habe ich keinen Einfluss auf die Dateien.

    Es hat sich jetzt soweit ergeben, dass die anzupassende Datei in soweit bearbeitet werden muss dass einfach an das Ende noch weitere Variabeln angehängt werden müssen. (add-content) Jedoch müssen einige Variabeln überprüft werden ob diese vorhanden sind und wenn dann müssen diese gelöscht werden.

    Es dürfen auch keine Leerzeilen vorhanden sein.

    Montag, 20. Februar 2017 08:35
  • Hi,

    also neu Erkentnisse:

    ich bin eigentlich mit dem hier schon soweit durch:

    $Quelle,$Inhalte | Add-Content $Ziel

    In der quelle steht das was schon da ist + das was dazu kommt $Inhalt gespeichert in eine neue Datei.

    Jetzt fehlt mir nur noch das löschen der Werte.

    Mit Replace habe ich schon gearbeitet aber das funktioniert nicht weil er mir dann auch Zeilen ersetzt welche aus dem zu ersetzendem Wort zusammengesetzt ist.

    Beispiel:

    Cache= soll gelöscht werden.

    In Meiner Datei steht aber irgendwo Devicecache=1

    Dann ersetzt "-replace" mir eben leider ab Device cache mit dem was ich vorgeben.

    Habt ihr dafür ne Lösung.

    Montag, 20. Februar 2017 10:22
  • Hallo,

    -replace unterstützt Reguläre Ausdrücke. Wenn du möchtest, dass der Text ab Zeilenbeginn gesucht wird (und nicht irgendwo in der Zeichenkette), dann musst du nach "^Cache=" suchen.

    Viele Grüße

    Christoph

    Montag, 20. Februar 2017 10:37