Datei gezielt zeilenweise auslesen

Hallo…

Ich bin dabei ein spiel zu programmieren, in dem ich IP-Adressen und die dazugehörigen namen der Server und so brauch.

Ich hab mir jetzt schon eine Textdatei gemacht, in der ich ein einer Zeile die IP stehen habe, und in der nächsten Zeile den Namen, dann wieder die IP und darunter dann wieder den Namen, und so weiter und so weiter…

Jetzt bräuchte ich eine möglichkeit, die Zeilen gezielt auszulesen…

Also, dass ich sag „ich brauch jetzt die 5. Zeile, und danach dann die 6. wiederum danach die 15. und danach den Server-Namen aus der 16. Zeile“

gibt es da eine Möglichkeit, das zu realisieren? ich bin mir sicher, dass es da was gibt, aber ich weiß nicht was…

vielen Dank im Vorraus,
Kevin

Hallo,

Ich bin dabei ein spiel zu programmieren, in dem ich
IP-Adressen und die dazugehörigen namen der Server und so
brauch.

Äh. Ja, gut, Spiel machen wollen, aber Textdatei nicht auslesen können? Okok, bin ja ruhig *g*

Ich hab mir jetzt schon eine Textdatei gemacht, in der ich ein
einer Zeile die IP stehen habe, und in der nächsten Zeile den
Namen, dann wieder die IP und darunter dann wieder den Namen,
und so weiter und so weiter…

Jetzt bräuchte ich eine möglichkeit, die Zeilen gezielt
auszulesen…

Also, dass ich sag „ich brauch jetzt die 5. Zeile, und danach
dann die 6. wiederum danach die 15. und danach den
Server-Namen aus der 16. Zeile“

So wirklich geht das nicht. Nachdem die Zeilen ja nur durch eine Zeilenschaltung (’\n’) getrennt sind, musst die schon selbst zählen :wink:

gibt es da eine Möglichkeit, das zu realisieren? ich bin mir
sicher, dass es da was gibt, aber ich weiß nicht was…

Du kannst dir entweder die Datei gleich ganz auslesen oder einmal durchparsen und die Positionen der ‚\n‘-Zeichen merken, um später einfach per fseek() in c und meinstream.seekg() in c++ hin zu springen.

Zeilenweise einlesen kannst du mit std::getline(), falls du das noch nicht kennst (kenne ja deinen Stand nicht).

mfg,
Christoph

Jetzt bräuchte ich eine möglichkeit, die Zeilen gezielt
auszulesen…

Also, dass ich sag „ich brauch jetzt die 5. Zeile, und danach
dann die 6. wiederum danach die 15. und danach den
Server-Namen aus der 16. Zeile“

Hallo Kevin,

da gibt es, ganz unabhängig von der Programmiersprache, 3 Möglichkeiten:

  1. Alle Zeilen sind gleich lang. Dann kannst du auf den Anfang einer Zeile positionieren, weil Zeile 5 an der Position 5 * Länge startet. Du darfst aber beim Schreiben keine Fehler machen.

  2. Du erstellst einen Index der Datei, in dem für jede Zeile die Position des Anfangs gespeichert ist. Das kann eine extra Datei sein, oder man bringt den Index am Anfang vor dem Text unter. Der Index muss nach jeder Änderung neu erstellt werden.

  3. Du lässt das alles bleiben und liest in Wirklichkeit jedesmal von Anfang an, bis du die n-te Zeile gefunden hast. Das ist bei kurzen Dateien, z.B. INI-Dateien mit einigen Einträgen, am einfachsten und effektiv genug.

Gruss Reinhard

Okay, vielen Dank ihr beiden!

ihr habt mir sehr geholfen.

Wie hast du das mit dem INDEX gemeint?
sry, aber könntest du mir in nem kurzen beispiel zeigen, wie das aussehen soll?

an die Sache mit dem getline hab ich auch gedacht, aber ich wollte wissen, ob es ne Möglichkeit gibt, anzugeben, welche Zeile er einlesen soll.

Die Sache mit dem Spiel ist folgende:

ich will für die Schule (soll ein Projekt werden) ein HackerSpiel programmieren.
ein WhiteHatHacker-Spiel um genau zu sein…
Hab die ganzen IP-Adressen von den Regierungen in einer Textdatei gesamelt, und auf diesen Rechnern soll jetzt virtuell nach Spuren der Verschwörungen gesucht werden :smile:

Freu mich schon, wenn das Teil fertig ist.

Hallo

Ich hab mir jetzt schon eine Textdatei gemacht, in der ich ein
einer Zeile die IP stehen habe, und in der nächsten Zeile den
Namen, dann wieder die IP und darunter dann wieder den Namen,
und so weiter und so weiter…

Das halte ich für ungünstig. Was spricht dagegen,
die zusammengehörigen Informationen auf einer
Zeile hintereinander, getrennt durch z.B.
Leerzeichen, anzugeben?

151.51.151.101 whitehouse.gov
151.51.151.201 blackhouse.gov
151.51.151.302 redhouse.gov

Jetzt bräuchte ich eine möglichkeit, die Zeilen gezielt
auszulesen…

Das würde ich eigentlich immer
so machen, dass ich zuerst die gesamte
Datei einlese, um nachher einfach zu
der Zeile (Datenstruktur) zu gehen,
die ich brauche.

Also, dass ich sag „ich brauch jetzt die 5. Zeile, und danach
dann die 6. wiederum danach die 15. und danach den
Server-Namen aus der 16. Zeile“

Daten[5].name
Daten[5].adresse

Daten[16].name

usw.

Grüße

CMb

Wie hast du das mit dem INDEX gemeint?
sry, aber könntest du mir in nem kurzen beispiel zeigen, wie
das aussehen soll?

Hallo, eine Datei mit Index am Anfang könnte so aussehen:

#00032
#00061
#00084
#00114
Deutschland AngelaMerkel.de
Frankreich Elyssee.fr
Grossbritannien TonyBlair.uk
Spanien prado.sp

d.h. #xxxxx ist ein Indexeintrag, der erste für den ersten datensatz usw., und enthält die Position des ersten Zeichens des Datensatzes. ist bei n * 8 kein #, so gibt es den Datensatz nicht.

Gruss Reinhard