none
Textdatei nach Werten Filtern, anschließend neue Datei erstellen RRS feed

  • Frage

  • Hallo zusammen,

    ich soll im Rahmen einer Aufgabe einen Text ...

    Dies1 ist eine Testdatei.

    Und 2 ier die Zweite zeile dazu.

    Dana3 die dritte.

    Gefo4gt von der vierten.

    Die 5ünfte ist die letzte.

    Num 6

    Zeil7e sieben.

    .... filtern. Und zwar immer die 5. Spalte - das fand ich ein wenig verwirrend, gemeint ist wohl jeweils das 5te Zeichen im Text.

    Das Ergebnis aus jeder Zeile wäre also 1, 2,3,4,5,6,7 - dies soll nun in eine neue Textdatei geschrieben werden. Das Programm soll beim erneuten ausführen erkennen können ob in der neu erstellten Datei bereits ein Text vorhanden ist, falls ja - soll der text gelöscht werden.

    Für eine Zeile ist das "fast" kein Problem:

    (Get-content C:\Powershell\Aufgabe_5.txt)[-7][4] | Add-content -Path c:\PowerShell\Aufgabe_5neu.txt

    Nur wie bekomme ich das für alle Zeilen hin und wie füge ich das "Lösch" Programm ein? Vermutlich pipe

    ich das Programm nochmal und setze Clear-Content ein, aber ich komme leider nicht drauf wie.

    Für Gedankliche Erleuchtungen bin ich dankbar.

    Viele Grüße

    Dienstag, 14. Juli 2015 09:08

Antworten

  • Hallo, 

    das klingt mir sehr nach einer Schul-/Ausbildungsaufgabe? Hier hast du mal noch ein paar Anregungen.

    Prüfe als erstes ob die Datei schon vorhanden ist und Inhalt hat. 

    Am besten mit Test-Path und wenn das Wahr ist, dann schaust du ob der Inhalt nicht Null ist (length). 

    Wenn der Inhalt nicht Null ist, sollst du deine Datei löschen, also Clear-Content. 

    Um deiner Aufgabe gerecht zu werden, musst du das in ein paar If-Anweisungen bauen. Die Anregungen dafür sind schon in den vorangegangenen Beispielen zu sehen. 

    Grüße 

    Andy 

    Dienstag, 14. Juli 2015 16:16

Alle Antworten

  • Hallo, also das wäre einer der einfacheren Wege:

    $text= Get-Content -Path C:\tmp\Text.txt
    $Substring = foreach($zeile in $text){if($zeile.Length -ge 4){$zeile.Substring(4,1)}}
    $Substring | Out-File -FilePath C:\tmp\substring.txt -Force

    Was wird gemacht? Der Inhalt deiner Textdatei wird in die Variable $text geschrieben und im folgenden zeilenweise abgearbeitet. Die Variable $zeile bildet immer eine Zeile ab. Wenn die Zeile keine Mindestlänge von 5 Zeichen hat, wird nichts gemacht, wenn nicht wird das 5. Zeichen genommen.

    Die Variable $Substring beinhaltet immer dein 5. Zeichen und wird dann in die Datei Substring.txt geschrieben. Der Schalter Force gibt an, dass schon vorhandene Dateien überschrieben werden.

    Alternativ kannst du das noch mit einer If abfrage machen, da kannst du dir noch eine Meldung einbauen, dass die Datei überschrieben wird.

    Grüße Andy

    https://joinpowershell.wordpress.com/


    • Bearbeitet Andreas Bittner Dienstag, 14. Juli 2015 11:08 Code Verbesserung
    Dienstag, 14. Juli 2015 10:56
  • Hallo Andreas,

    danke erst Mal für die fixe Antwort.

    Grundsätzlich funktioniert es so - allerdings sollte das Programm die neu erstellte Datei nicht überschreiben sondern beim Zweiten ausführen checken ob sich dort ein Inhalt befindet, dieser ist ja nach dem ersten ausführen vorhanden. Nun soll das Programm die Datei leeren. Und beim dritten ausführen beginnt der Spaß von vorne.

    Grüße


    Dienstag, 14. Juli 2015 11:35
  • Hallo,

    ich verstehe dich nicht ganz, ist es nicht egal, ob du die Datei löschst und neu füllst oder ob die sie einfach überschreibst. Oder musst du den Inhalt vorher noch abgleichen ? So wie ich es verstehe, willst du sowas haben:

    $outpath = 'C:\tmp\substring.txt'
    $text= Get-Content -Path 'C:\tmp\Text.txt'
    $Substring = foreach($zeile in $text){if($zeile.Length -ge 4){$zeile.Substring(4,1)}}
    
    if (Test-path -Path $outpath)
    {
    
    $fileexist = Read-Host "Die Datei ist bereits vorhanden, soll diese geleert werden? y/n"
        if($fileexist -like "y")
        
        {
           Clear-Content -Path $outpath
           Add-Content -Path $outpath -Value $Substring    
        
        }
        else
        {
        Write-Host "Der Vorgang wurde abgebrochen."
        
        }
    
    
    }
    
    else
    {
    $Substring | Out-File -FilePath $outpath
    
    }

    Grüße

    Andy

    Dienstag, 14. Juli 2015 12:49
  • Das ist der genau Wortlaut:

    Schreiben Sie ein Programm, welches den Inhalt einer Datei einliest und von jeder Zeile die 5. Spalte in einer neuen Datei schreibt und anschließend den Inhalt anzeigt. Beim erneuten Aufruf des Programms soll ein eventueller Inhalt in der neuen Datei gelöscht werden. Der Einfachheit halber hat die Datei genau 7 Zeilen und soll folgenden Inhalt haben:
    Die Datei „Aufgabe_5.txt“:
    Dies1 ist eine Testdatei.
    Und 2 ier die zweite Zeile dazu.
    Dana3 h die dritte.
    Gefo4gt von der vierten.
    Die 5ünfte ist die letzte.
    Num 6
    Zeil7e sieben.
    Die neue Datei heißt „Aufgabe_5neu.txt“.
    Verwenden Sie für die Lösung eine Schleifenkonstruktion.

    _____________________________________________

    Ich kann leider erst ab 18 h wieder an den PC zum wurschteln, daher konnte ich deinen Vorschlag von gerade nicht ausprobieren.

    Grüße

    Dienstag, 14. Juli 2015 13:00
  • Hallo, 

    das klingt mir sehr nach einer Schul-/Ausbildungsaufgabe? Hier hast du mal noch ein paar Anregungen.

    Prüfe als erstes ob die Datei schon vorhanden ist und Inhalt hat. 

    Am besten mit Test-Path und wenn das Wahr ist, dann schaust du ob der Inhalt nicht Null ist (length). 

    Wenn der Inhalt nicht Null ist, sollst du deine Datei löschen, also Clear-Content. 

    Um deiner Aufgabe gerecht zu werden, musst du das in ein paar If-Anweisungen bauen. Die Anregungen dafür sind schon in den vorangegangenen Beispielen zu sehen. 

    Grüße 

    Andy 

    Dienstag, 14. Juli 2015 16:16
  • Ja, das ist eine Aufgabe die ich zur Vorbereitung auf eine Prüfung bekommen habe. Allerdings wurde das Thema nur minimal angesprochen und die ganze Thematik ist Neuland. Ich versuche das ja zu verstehen, du sprichst also mit einem Neuling ;-) Nirgends wurde eine so (für mich komplexe) Aufgabe detailliert erklärt. 

    $outpath = C:\PowerShell\Aufgabe_5neu.txt   (Hier soll die neue Datei hin)
    $text = Get-Content -Path C:\PowerShell\Aufgabe_5.txt   (Hier wird die Datei eingelesen)
    $Substring = foreach($zeile in $text){if($zeile.Length -ge 4){$zeile.Substring(4,1)}}  (Hier wird der Inhalt der in die neue Datei soll eingelesen, dabei wird aus Jeder Zeile die 5 Stelle ausgelesen)

    if (Test-Path -Path $outpath)   (hier wird gestest ob der Pfad bzw. die Datei verfügbar ist)
    [Hier soll die Inhaltsüberprüfung rein]
    {
    Clear-Content -Path $outpath   (Inhalt vorhanden, dann löschen)
    }
    else
    {
    Add-Content -Path $outpath -Value $Substring (Datei nicht vorhanden, erstelle und zeige Datei an)
    }


    Ich habe mal in Klammern dahinter geschrieben, wie ich mir das vorstelle.

    Grüße

    Dienstag, 14. Juli 2015 17:23
  • Habe die Lösung, Danke für alle Bemühungen.
    Mittwoch, 15. Juli 2015 12:35
  • Hallo ich weiss der Post ist schon sehr alt, aber ich habe die gleiche Aufgabe im Moment und komme überhaupt nicht weiter, kann mir jemand die Lösung und ein paar Erklährungen dazu schicken?
    Donnerstag, 17. September 2020 14:45
  • Hallo Freeplay298 und Willkommen im Deutschen Microsoft Powershell Forum.

    ... ich weiss der Post ist schon sehr alt, aber ich habe die gleiche Aufgabe

    Es ist aber trotzdem nicht ok, einfach einen anderen Thread zu kapern. Stattdessen erstellst Du einfach eine neue/eigene Frage und verlinkst den Thread auf den Du Dich beziehen willst darin. ;-) 

     kann mir jemand die Lösung und ein paar Erklährungen dazu schicken?

    Wie Du Dir bestimmt denken kannst, liefern wir hier keine gebrauchsfertigen Lösungen auf Anfrage frei Haus. Schon gar nicht, wenn es Hausaufgaben sind. Schließlich sollst Du ja etwas dabei lernen. Und wenn wir Deine Hausaufgaben machen, lernst Du nix.

    im Moment und komme überhaupt nicht weiter,

    An welcher Stelle hängst Du denn? Du wirst ja wenigstens einen Anfang haben, oder? Zeig uns Deinen Code (als Code formatiert bitte und wie oben schon erwähnt, in einem neuen Thread) und wir können Dir bestimmt mit Tipps weiterhelfen.


    Live long and prosper!

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

    Donnerstag, 17. September 2020 19:04