Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Huhu,

nun hab ich die nächste Hausaufgabe, die folgendermaßen lautet

"Erstellen sie ein Programm, das die letzten n Zeilen einer Textdatei ausgibt, wobei n wählbar ist. Die Angabe des Dateinamens, ebenso wie die Anzahl der auszugebenden Zeilen werden interaktiv eingeben.

Fehlerbehandlung bei fehlerhaften Eingaben ist vorzusehen.

Es ist in Ordnung, wenn n einen Maximalwert hat und die Zahl der Zeilen zwischen dem 1 und dem Maximalwert gewählt werden kann."

Meiner Meinung nach MUSS ich das über ein Array irgendwie lösen, denn in einer Datei vom Ende zum Anfang zählen wird schwer, oder ist sogar unmöglich?

Da ich aber noch nie mit Arrays gearbeitet habe *schäm* habe ich noch keinen blassen Schimmer wie ich das realisieren soll :(

Wäre lieb wenn ihr mir helft :e@sy

UnderTears

Geschrieben

Ne, die mache ich schon lieber selbst :D

Ich müsste wissen wie ich ne vorhandene Datei in ein Array schreiben kann und evtl. noch wie sich der Zugriff regelt.

Oder gibt es irgendeine andere Möglichkeit die Zeilen aus der Datei quasi rückwärts auszulesen?

Geschrieben

2 Funktionen :

1) zählt wie viele Zeilen, die Datei hat, da reicht auch fgetc

2) liest, jede zeile komplett in ein char *ptr_auf_arr ein -> fgets(pointername, maximale Zeilenlänge, Dateihändler);

zu beachten ist, dass die Datei während des Programms, nicht bearbeitet wird.

Geschrieben
Ne, die mache ich schon lieber selbst :D

Ich müsste wissen wie ich ne vorhandene Datei in ein Array schreiben kann und evtl. noch wie sich der Zugriff regelt.

Oder gibt es irgendeine andere Möglichkeit die Zeilen aus der Datei quasi rückwärts auszulesen?

Du kannst meiner Meinung nach 2 Methoden machen:

1) Du liest die komplette Datei ein, jede Zeile ein Array-Eintrag, und gibst dann nur die letzten n aus.

2) Du navigierst Dich von Hinten nach Vorne in der Datei und zählst die Zeilen mit.

Geschrieben
Du kannst meiner Meinung nach 2 Methoden machen:

1) Du liest die komplette Datei ein, jede Zeile ein Array-Eintrag, und gibst dann nur die letzten n aus.

Wie schreibe ich denn in ein Array? Ich habe da noch 0 mit zu tun gehabt:(

Das hätte ich gern gemacht, aber...mir fehlt irgendwie das logische Verständnis zur Umsetzung.

Die ersten n Zeilen von vorne, ist ja kein Problem, das hab ich neulich ja auch hinbekommen. Nur wie lasse ich zum Ende der Datei springen? Und von da rückwärts auslesen? Da bin wohl zu blöd für....:hells:

Geschrieben
Wie schreibe ich denn in ein Array? Ich habe da noch 0 mit zu tun gehabt:(

Das hätte ich gern gemacht, aber...mir fehlt irgendwie das logische Verständnis zur Umsetzung.

Die ersten n Zeilen von vorne, ist ja kein Problem, das hab ich neulich ja auch hinbekommen. Nur wie lasse ich zum Ende der Datei springen? Und von da rückwärts auslesen? Da bin wohl zu blöd für....:hells:

Da wirste wohl nich drumherum kommen Dich ein bisschen mit Arrays z.B. zu beschäftigen, ich kann und will Dir jetzt nich alles hier aufschreiben, da ich die Befehle selber nich auswendig kenne.

Geschrieben

In C++ ist es auch nicht möglich.

Geh vorwärts durch die Datei, merk dir die Positionen der Zeilenanfänge in einem Array oder Vector. Spring dann an die Position der n-ten Zeile von hinten und gib die Datei von dort an aus.

Geschrieben

Hallo,

da es darum geht die letzten n Zeilen auszugeben, sollte man von hinten anfangen (schon aus dem Grund um Rechenzeit und Dateizugriffe zu sparen; es gibt ja keinen Grund 5 Millionen Zeilen sequentiell zu lesen, um dann nur die letzten beiden auszugeben). Ich würde das wie folgt machen:

Dateigrösse ermitteln

Von hinten anfangen zu lesen (mittels lseek den Lesepointer entsprechend setzen)

Solange bis ein Newline (Zeilentrenner) gefunden wird,

Zeile ausgeben

Das ganze wiederholen, bis entweder die passende Anzahl an Zeilen ausgegebn wurde oder man am Anfag der Datei ist

Optimieren kann man das natürlich auch noch, in dem beispielsweise ein Puffer verwendet wird, in den Teile der Datei eingelesen werden (ebenfalls von hinten, beispielsweise immer in 512 Byte Schritten). Man muss sich dann aber über das Puffermanagement und überlappende Zeilen gedanken machen.

Nic

Geschrieben
reden wir hier von C oder C++ ? In C ist es afaik nicht möglich eine Datei von hinten nach vorne zu lesen. auch in php ist es afaik nicht drin. EOF wäre ja dann quasi nicht mehr möglich

ich glaube "Rückwärts einlesen" ist definitionssache... man kann sehr wohl in PHP zur letzten Zeile gehen einlesen und dann zur vorletzten etc. und dann benutzt man nicht "!feof" sondern bof ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...