Eine bestimmte Zeile aus .txt-Datei lesen

Dieses Thema im Forum "C/C++" wurde erstellt von Blender3D, 20.12.2009.

  1. #1 Blender3D, 20.12.2009
    Blender3D

    Blender3D Vitamin C++

    Dabei seit:
    17.09.2007
    Beiträge:
    228
    Zustimmungen:
    0
    Ort:
    /root
    Hallo!

    Ich habe im Moment ein kleines projekt am laufen. Ich programmiere "Galgenmännchen" für die Konsole. Allerdings habe ich dabei ein kleines Problem. Ich möchte, dass das Wort welches zu erraten ist aus einer Datei gelesen wird. In der datei steht jedes Wort in einer eigenen Zeile. Ich habe es auch schon so weit, dass ich eine einzelne Zeile auslesen kann. Nur ist es leider immer die erste Zeile. Meine Frage ist, wie kann ich es hinbekommen, dass ich z.B. die 27. Zeile auslesen kann. Oder auch die 45. Zeile.

    Über eine (gescheite) Antwort würde ich mich sehr freuen!

    Grüße, Bender3D

    PS: ich programmiere in C++
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 saeckereier, 20.12.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Warum liest du die Datei nicht direkt am Anfang komplett in den Speicher, z.B. in ein Array?
     
  4. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Code:
    $WORT=head -n $ZEILE datei | tail -n 1
    Würde mir jetzt gerade dazu einfallen. Aber es gibt sicher etwas besseres, mit sed und so...
     
  5. #4 saeckereier, 21.12.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Das Schlüsselwort war aber leider Programmieren und nicht skripten..
     
  6. #5 marcellus, 21.12.2009
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Es wird dir nicht viel Anderes übrig bleiben, als den stream nach '\n' zu durchsuchen.
    Allerdings hab ich viel zu wenig ahnung von der c++ string api, ich programmier eigentlich nur in C. Aber in C würde ich denk ich getline öfter ausführen.
     
  7. seim

    seim seim oder nicht seim?

    Dabei seit:
    08.09.2006
    Beiträge:
    909
    Zustimmungen:
    0
    Ort:
    /mnt/reallife
    Code:
    #include <stdio.h>
    void main(void)
    {
    FILE *fp;
    char zeile[132];
    if((fp = fopen („datei.txt“ , „r“))==NULL)
    {
    printf(„Datei konnte nicht geöffent werden \n“);
    }
    else
    {
    fscanf(fp, „%s“, zeile); //oder: fgets(zeile, 132, fp); - 132 = max. anzahl an zeichen
    printf(„%s \n“, zeile);
    fclose(fp);
    }
    }
    Code:
    if(fscanf(…) != EOF)
    {
    /* noch kein Ende Datei */
    }
     
  8. #7 T-Virus, 22.12.2009
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Bin leider auf arbeit und kann dir keinen C++ Code schreiben.
    Aber hier ist eine einfache Idee für dich.

    Am einfachsten wäre es, wenn du die Datei komplett einliest, C++ bietet hier die list Klasse an dann kannst du die Einträge gut speichern, und fragst dann die Größe der Datei ab.
    Nun kannst du mit der Größe der Liste und einem kleinen Zufallsgenerator zufällig einen Wert aus der Datei lesen.

    Ansonsten kannst du auch nur prüfen wieviele Zeilen die Datei hat und liest dann solange die Zeilen ein, bis zu die gesuchte hast.
    Dies spart die dann viel Speicher bei größeren Dateien.

    Sobald ich wieder zuhause bin, such ich mal etwas Code für dich raus.

    @seim
    Dein Code ist unnötig auf C ausgelegt.
    C++ bietet schönere Möglichkeiten und diese sind auch für mich etwas schöner.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Blender3D, 22.12.2009
    Zuletzt bearbeitet: 22.12.2009
    Blender3D

    Blender3D Vitamin C++

    Dabei seit:
    17.09.2007
    Beiträge:
    228
    Zustimmungen:
    0
    Ort:
    /root
    Danke für die vielen Antworten.

    Ich dachte eigendlich an eine Funktion, bei der man als Argument nur die Datei, die Variable in der der Inhalt gespeichert werden soll und die Zeilenummer angibt.

    amöbe's Script ist dazu nicht ganz sinnlos, denn ich kann ja mit der system() funktion die entsprechenden Befehle ausführen. Die einzige Frage ist dann nur noch, wie ich dann das Ergebnis in mein Proramm bekomme.

    Ich versuche ersteinmal (was mir am einfachsten erscheint) die Datei nach '\n' zu durchsuchen und jedes mal irgend eine int-Variable zu inkrementieren und wenn die den wert hat die Zeile auszulesen.

    Grüße, Blender3D

    Edit: Ich habe es jetzt hinbekommen. Die Datei wird in einen ausreichend großes Array geschrieben. Dann wird der Inhalt dieses Arrays Buchstabe für Buchstabe untersucht und wenn x-mal das Zeichen ';' gefunden wurde werden alle Zeichen bis zum nächsten ';' in ein anderes Array geschrieben. Das einzige, was ich noch machen muss ist, dass das afängliche ';' im Ergebnisarray weg muss. Aber dass bekomme ich schon noch hin ;)
    Sources im Anhang.
     

    Anhänge:

  11. #9 T-Virus, 22.12.2009
    T-Virus

    T-Virus Free Software Fan :p

    Dabei seit:
    06.01.2009
    Beiträge:
    107
    Zustimmungen:
    0
    Ich habe mir mal die file.h angeschaut.
    Ich muss aber sagen, dass ich mit dieser Lösung an sich nicht zufrieden wäre.
    Warum nimmst du keine Liste?
    Diese sind sicherer und die Größe zur Laufzeit wird dort intern geregelt.
    Wenn du mehr als 20 Worte in der Datei stehen hast, kracht es.

    Ansonsten kannst du auch Zeilenweise Dateien einlesen.
    Dafür kannst du die Funktion getline nutzen.
    Diese benötigt als Parameter nur ein fstream Objekt und einen buffer(std::string kann ich hier empfehlen).

    Somit kannst du die STL arbeiten lassen und muss das Rad nicht neu erfinden.

    Martin
     
Thema: Eine bestimmte Zeile aus .txt-Datei lesen
Besucher kamen mit folgenden Suchen
  1. C String am anfang einer Datei löschen

Die Seite wird geladen...

Eine bestimmte Zeile aus .txt-Datei lesen - Ähnliche Themen

  1. Wie kann ich x Zeichen hinter einem bestimmten Wort ausgeben ?

    Wie kann ich x Zeichen hinter einem bestimmten Wort ausgeben ?: In mehreren Dateien ist immer mehrfach ein bestimmtes Wort enthalten, gefolgt von einem "=". Ich möchte mir die dahinter folgenden 10 Zeichen...
  2. SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

    SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird: Hallo Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber...
  3. String einer bestimmten Zeile durchsuchen

    String einer bestimmten Zeile durchsuchen: Hallo, wie kann ich den eine bestimmte Zeile einer Textdatei zerlegen und daraus ein Stück entnehmen? Ich suche nach der Zeile in der "model...
  4. Dateien ab einer bestimmten Zeile löschen

    Dateien ab einer bestimmten Zeile löschen: Hallo, ich habe ein Skript geschrieben, welches mir mehrere Dateien in eine einzige Datei zusammenführt. Die einzelnen Dateien enthalten aber...
  5. ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

    ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern: Hallo Leute, heute brauche ich mal einen dringenden Rat von Euch. Ich habe hier etwas mehr als 1200 PDF-Dateien (Text), die jeweils ein...