Eine bestimmte Zeile aus .txt-Datei lesen

Blender3D

Blender3D

Vitamin C++
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++
 
Warum liest du die Datei nicht direkt am Anfang komplett in den Speicher, z.B. in ein Array?
 
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...
 
Das Schlüsselwort war aber leider Programmieren und nicht skripten..
 
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.
 
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 */
}
 
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.
 
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

  • file.tar.gz
    1,1 KB · Aufrufe: 4
Zuletzt bearbeitet:
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
 

Ähnliche Themen

Keine grafische Oberfläche (Debian Installation)

mehrere variablen aus datei lesen

Ein komplizierteres Thema: Samba Server - XP-Pro Clients - wlan lan und und und

jede menge anfängerfragen

Server-Monitoring mit RRDTool

Zurück
Oben