Klarste Weg, um zu Lesen und zu drucken .txt-Datei Zeilen in C
Gibt es eine Reihe von Möglichkeiten, die beschreiben, wie verschiedene Methoden zum drucken von Zeilen einer text-Datei auf dieser Seite:
Sie scheinen alle zu sein, zugeschnitten auf ein spezifisches Beispiel.
Wäre es toll, die Klarsten und prägnanteste und Einfachste Weg zu einfach: drucken jede Zeile einer Textdatei auf den Bildschirm. Vorzugsweise mit detaillierten Erklärungen, was jede Zeile macht.
Punkte für Kürze und Klarheit.
- Was versuchen Sie zu tun ? Wollen Sie dump die ganze Datei ?
- Auf UNIX, es heißt
cat
. - Ich würde gerne drucken jeder einzelnen Zeile der Textdatei auf dem Bildschirm aus. Wenn die Datei hatte sagen wir 5 Zeilen, ich möchte die klarste Weg, um Sie einfach öffnen Sie es und drucken Sie diese fünf Zeilen. Soweit meine eigentliche code; ich habe nicht eine bestimmte Verwendung im Sinn. Es wäre nur toll, haben ein sehr gutes Verständnis der beste Weg zum ausführen dieses einfache Konzept.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
cat()
Funktion ist nicht unbedingt notwendig, aber ich würde eher verwenden es. Die wichtigsten Schritte-Programm durch jede Befehlszeile argument und öffnet die benannte Datei. Wenn es gelingt, ruft es diecat()
Funktion drucken Sie dessen Inhalt. Da der Aufruffopen()
nicht angeben"rb"
es geöffnet wird als text-Datei. Wenn die Datei nicht geöffnet ist, wird dieser code ignoriert das Problem. Wenn keine Dateien angegeben sind, wird nichts gedruckt.Den
cat()
Funktion liest einfach Textblöcke bis zu 4096 bytes zu einer Zeit, und schreibt Sie auf die Standardausgabe ('Bildschirm'). Es Stoppt, wenn es keine mehr zu Lesen.Wenn Sie möchten, erweitern Sie den code zum Lesen von der Standardeingabe, wenn keine Datei angegeben ist, dann können Sie verwenden:
das ist einer der Gründe, dass die
cat()
- Funktion geschrieben werden, wie gezeigt.Dieser code nicht zahlen lenken den Blick auf neue Zeilen — oder Zeilen beliebig Sortieren. Wenn Sie möchten, um es zu verarbeiten formal eine Zeile zu einem Zeitpunkt, dann können Sie mehrere Dinge tun:
Lesen und schreiben, eine Zeile zu einem Zeitpunkt. Wenn keine Zeile ist länger als 4095 bytes, wird es Lesen Sie die Zeile in zwei oder mehr Operationen und schreiben Sie es in die gleiche Anzahl von Operationen. Beachten Sie, dass dies geht von einer text-Datei in einer Weise, dass die version mit den
fread()
undfwrite()
nicht. Auf POSIX-Systemen, die version mitfread()
undfwrite()
behandeln beliebige binäre Dateien mit null-bytes ('\0'
) in den Daten, aber die version mit denfgets()
undfputs()
nicht. Beide Versionen sind bisher streng standard C (beliebige version der standard) Sie verwenden keine Plattform-spezifischen Erweiterungen; Sie sind ungefähr so handlich wie der code sein kann.Alternativ wieder, wenn Sie die POSIX 2008
getline()
Funktion, die Sie verwenden können, aber Sie müssen#include <stdlib.h>
zu (weil Sie am Ende mit, um den Speicher freizugeben, weist es):Diese version auch nicht mit binären Daten (d.h. Daten mit null-bytes drin). Es aktualisiert werden kann, um so zu tun, natürlich:
Den
getline()
- Funktion meldet, wie viele bytes er Lesen (es gibt eine null-byte, dass nach), aber diefwrite()
Funktion ist das einzige, das einen Strom von beliebigen bytes und schreibt Sie alle auf dem angegebenen stream.malloc()
. Mitstat()
Beziehungen zu Ihnen auf POSIX-Systemen; der ursprüngliche code ist portabel auf jedem system unterstützen (keine) standard-C-version. Einfachheit war eines der Ziele.return(0);
immain()
. Wenn ich bereit war, zu verwenden Sie K&R Stil Einzug (bin ich nicht), ich könnte verlieren, ein paar Zeilen. Streng, die geschweiften Klammern nach der while-Schleife sind nicht notwendig, aber ich möchte es nicht versäumen, Ihnen entweder. Seien Sie mein Gast und komprimieren es weiter. Ich kurz auf Fehlermeldungen Fehler beim öffnen der Datei.fread()
undfwrite()
arbeiten mit beliebiger Binär-Dateien zu; die anderen Versionen übernehmen Zeichenfolgen ohne eingebettete null-bytes'\0'
. Der code macht wirklich sehr wenige Annahmen.Gut, hier ist eine sehr kurze Lösung, die ich schließlich gemacht. Ich vorstellen, es somethign grundlegend falsch mit ihm, sonst wäre es schon vorgeschlagen, aber ich dachte, ich würde es hier posten und hoffe, jemand reißt es auseinander:
fopen()
; (3) Ihre Erklärung fürmain()
ist nicht gültig in C99 oder C2011 — so sollte es seinint main(void)
oderint main(int argc, char **argv)
(oder, im Notfall,int main()
); (4) es wäre besser, verwendenputchar()
oderfputc()
alsprintf()
zur Ausgabe eines einzelnen Zeichens; (5) es wäre besser, idiomatischer C zu verwendenwhile ((c = fgetc(MyFile)) != EOF) putchar(c);
; (6) fehlendefclose(MyFile)
.int c;
— das ist sowohl richtig als auch wichtig. Streng, da schrieb Sie einen C89 definition fürmain()
verwenden, sollten Siereturn(0);
(geben oder nehmen Sie die Klammern) am Ende dermain()
. Wenn Ihr code war C99-kompatibel, Sie bekommen konnte Weg, ohne, dass, obwohl aus meiner Sicht ist es besser, es auch in C99 oder C2011-code.@Dlinet, die Sie versuchen zu lernen, einige nützliche lehren, wie zu organisieren ein Programm. Ich werde nicht post code, da ist schon eine wirklich ausgezeichnete Antwort; ich kann unmöglich Verbesserung auf Sie. Ich möchte aber empfehlen, ein Buch für Sie.
Das Buch heißt Software Tools in Pascal. Die Sprache ist Pascal, nicht C, aber für die Lektüre des Buches dadurch keine ernsthaften Schwierigkeiten. Sie starten aus, um einfache Werkzeuge wie in diesem Beispiel (welches unter UNIX heißt
cat
) und Sie bewegen sich auf bis zu fortgeschrittenen Sachen. Nicht nur, dass Sie unterrichten großen Lektionen auf, wie zu organisieren, diese Art von Programm, Sie betreffen auch die Sprache, die design-Fragen. (Es gibt Probleme in Pascal, die wirklich ärgern Sie, und wenn Sie wissen, C werden Sie feststellen, dass C keine Probleme.)Das Buch ist vergriffen, aber ich fand es Ungeheuer wertvoll, wenn ich lernte, code zu schreiben. Die so genannten "linken Ecke design" - Methodik dient mir gut an diesem Tag.
Ich ermutige Sie zu finden, ein gebrauchtes Exemplar bei Amazon oder wo auch immer. Amazon gebrauchte Exemplare ab $0.02 plus $4 Versand.
http://www.amazon.com/Software-Tools-Pascal-Brian-Kernighan/dp/0201103427
Wäre es eine lehrreiche übung zu studieren, die Programme in diesem Buch und deren Implementierung in C. Jedes Linux-system bereits mehr allmächtig und voll debugged-Versionen dieser Programme, aber wäre es nicht eine Verschwendung Ihrer Zeit zu arbeiten, durch dieses Buch und lernen, wie Sie schreiben dieses Zeug.
Alternativ könnte FreePascal installieren auf Ihrem computer und verwenden Sie es zum ausführen der Programme aus dem Buch.
Glück und kann Sie genießen immer die software-Entwicklung!
Wenn du etwas möchtest, prebaked, es gibt
cat
auf POSIX-Systemen.Wollen Sie es selbst schreiben, hier das grundsätzliche layout:
Der Punkt ist, es gibt nicht wirklich eine spezifische Art und Weise, es zu tun. Einfach Lesen, dann schreiben, und wiederholen Sie. Mit einigen Fehler überprüfen, Sie habe die Katze wieder alles vorbei.