Eine bestimmte Zeile aus .txt-Datei lesen

Diskutiere Eine bestimmte Zeile aus .txt-Datei lesen im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo! Ich habe im Moment ein kleines projekt am laufen. Ich programmiere "Galgenmännchen" für die Konsole. Allerdings habe ich dabei ein...

  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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    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. #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:

  10. #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. fscanf bestimmte teile auslesen

    ,
  2. liste txt loc:DE

    ,
  3. txt Tabellen einlesen in Fortran

    ,
  4. geben sie alle zeilen der datei aus in denen der die oder das vorkommt,
  5. c datei auslesen,
  6. zeile 5 aus text datei lesen,
  7. unix txt Datei textfeld auslesen,
  8. fortran zeilenweise lesen,
  9. c zeile aus txt auslesen,
  10. sed zufallszeile,
  11. fortran datei einlesen zeilenweise,
  12. fortran bestimmte zeile aus datei einlesen,
  13. linux datei zufällige zeile,
  14. C String am anfang einer Datei löschen
Die Seite wird geladen...

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

  1. Zeilen behalten, die Werte in einem bestimmten Bereich enthalten

    Zeilen behalten, die Werte in einem bestimmten Bereich enthalten: Hallo, ich habe eine Datei mit 4 Spalten, in denen Zahlenwert liegen. Ich möchte gerne alle Zeilen behalten, bei denen der Wert in der dritten...
  2. Zeilen aus Txt-Datei entfernen, wenn eine Spalte einen bestimmten Wert enthält

    Zeilen aus Txt-Datei entfernen, wenn eine Spalte einen bestimmten Wert enthält: Hallo, ich habe folgendes Problem. Ich erstelle mit Hilfe einer Shell eine Liste, die vier Spalten mit Zahlenwerten enthält. Wenn die letzte...
  3. Ein Wort hinter einer bestimmten Zeichenfolge suchen und ausgeben

    Ein Wort hinter einer bestimmten Zeichenfolge suchen und ausgeben: Hallo, ich habe eine Datei, die ich nach bestimmten Wörtern durchsuchen und, wenn gefunden, x Zeichen hinter sdiesem Wort ausgeben möchte....
  4. Programmfenster nur auf einem bestimmten Monitor zulassen

    Programmfenster nur auf einem bestimmten Monitor zulassen: Hallo, ich hoffe ich habe das hier richtig einsortiert. Mein Problem besteht darin, dass ich an meinem Rechner (Ubuntu 17.04) einen Monitor zum...
  5. Bestimmte Zeilen einer Spalte addieren

    Bestimmte Zeilen einer Spalte addieren: Hallo, würde mich über Hilfe in Form eines Unix-Befehls oder AWK bei folgendem Problem freuen: Ich habe eine Textdatei, in der Werte drin sind in...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden