Lesen Sie eine Datei in ein Array in C ++

Lesen Sie eine Datei in ein Array in C ++
Das Lesen der gesamten Datei in ein Array ist nicht so schwierig, wie sie klingen mag. Eine Datei, ob Text oder anderweitig, besteht aus Bytes von Anfang bis Ende. Die Bytes können als Zeichen gelesen werden. Die Charaktere können einzeln in das Array gelesen werden.

In diesem Artikel wird erläutert, wie man eine ganze Datei in ein Array liest. Der C ++ - Header (Bibliothek) fstream hat die Klasse ifstream. Die Klasse Ifstream hat () überlastete Mitgliederfunktionen erhalten. Zwei dieser überlasteten Mitgliederfunktionen können verwendet werden, um die gesamte Datei in ein Array zu lesen. Ein Programm für eine solche Lektüre sollte mit:

#enthalten
#enthalten
Verwenden von Namespace STD;

Die ersten beiden Zeilen sind Richtlinien, keine Aussagen. Der erste enthält die FStream -Bibliothek für die Get () -Funktionen. Der zweite enthält die iOstream -Bibliothek zum Drucken zum Terminal (Konsole) und zum Empfangen von Zeichen von der Tastatur. Die dritte Zeile ist eine Aussage. Es besteht darauf, dass jeder Name, dem „std ::“ nicht vorausgeht, den Standard -Namespace ist.

Es gibt ein kleines Problem mit den Get () -Funktionen, die Arraylänge muss geschätzt werden, um mindestens ein Zeichen mehr als die Anzahl der Zeichen in der Datei zu sein. Die Idee ist, dass '\ 0' kurz nach dem letzten Lesezeichen im Array eine lange Zeichenfolge bilden würde.

Wenn die Länge des Arrays nicht als solche geschätzt werden kann, muss die gesamte Datei in ein anderes Objekt wie ein String -Objekt (der String -Klasse) gelesen werden. Da das Ziel dieses Artikels darin besteht, zu erklären, wie man in ein Array einlesen, muss die Array -Größe geschätzt werden.

Für den Rest dieses Artikels wird angenommen, dass der Name der Datei, deren Inhalt gelesen werden soll, txtFile ist.TXT im Verzeichnis DIR1 im Heim-/Benutzerverzeichnis.

Artikelinhalt

- Lesen Sie die gesamte Datei-Zeichen für Charakter

- Lesen Sie die ganze Datei mit einer Mitgliedsfunktion

- Abschluss

Lesen Sie die gesamte Datei-Zeichen für Charakter

Die Syntax der überlasteten IFstream -Funktion get () ist dafür:

Basic_istream& get (char_type & c);

Ein Programmcode -Segment zum Lesen des nächsten Zeichens in der Datei lautet:

Char C;
char arr [100];
int i = 0;
while (ifs.GET (c))
arr [i] = c;
i ++;

Die erste Aussage erklärt die Variable, C empfängt jedes der Zeichen. Die zweite Aussage erklärt das Array, das alle Zeichen nacheinander empfängt. Die dritte Zeile deklariert einen Index für das Array, der von Null beginnt, um alle Elemente des Arrays anzusprechen, die einen Charakter empfangen. Mit diesem Ansatz kann '\ 0' hinzugefügt werden, nachdem das letzte Zeichen der Datei in das Array aufgenommen wurde.

Die Klammern der While-Loop haben,

Ifs.Holen Sie sich (c)

wobei IFS der Name des Ifstream -Objekts ist. Das nächste Zeichen der Datei wird von der GET -Mitgliedsfunktion erhalten und C. zugewiesen. Danach würde der interne Zeiger des Ifstream -Objekts nach dem Lesen auf den Charakter verweisen. Wenn das Dateiende erreicht ist, der Ausdruck „IFS.Holen Sie sich (c) "wird falsch statt wahr, und so endet die While-Schleife.

Das folgende Programm lesen alle Zeichen einer Datei und drucken Sie alle Inhalte in das Terminal aus:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

ifstream ifs = ifStream ("Dir1/txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C; int i = 0; char arr [100];
while (ifs.GET (c))
arr [i] = c;
i ++;

Ifs.schließen(); arr [i] = '\ 0'; Cout<
anders
Cout<< "File could not be open!" <Rückkehr 0;

Ifstream als codiert öffnet die Datei zum Lesen.

Lesen Sie die ganze Datei mit einer Mitgliedsfunktion

Die IfStream -überladete Get () -Mitglied -Funktion zum Lesen der gesamten Datei ohne die while -Schleife lautet:

Basic_istream& get (char_type* s, streamSize n, char_type delim);

Es liest immer noch die gesamte Datei Zeichen für Zeichen, aber das ist nicht mehr das Geschäft des C ++-Programmierers. Außerdem fügt diese Funktion das Nullzeichen '\ 0' im Namen des Programmierers hinzu, vorausgesetzt, N ist mindestens ein Zeichen länger als der Inhalt der Datei.

Das erste Argument dieser überlasteten Get () -Funktion ist das Array mit den gleichen Einschränkungen (einschließlich Schätzung) wie das obige Array, um alle Zeichen der Datei zu empfangen. Das zweite Argument, n, des StreamSize -Typs ist eine Schätzung der Anzahl der Zeichen in der Datei. Es ist ratsam, die Größe des Arrays und N, das gleiche zu machen. Mit dieser Mitgliedsfunktion ist keine Weile Schleife erforderlich.

Jetzt endet eine Zeile in einer Textdatei mit der Escape -Sequenz '\ n'. Wenn das dritte Argument '\ n' lautet, würde nur die erste Zeile der Datei gelesen. Daher muss die Funktion mit jedem Zeichen getäuscht werden, das wahrscheinlich nicht im Inhalt der Datei zu finden ist. Ein guter Kandidat für das dritte Argument ist '\ 0' '. Mit dieser überlasteten Mitgliederfunktion muss der Programmierer einige Kenntnisse der möglichen Zeichen in der Datei haben, um kein Zeichen zu verwenden, das Teil des Inhalts der Datei ist.

Das folgende Programm lesen alle Zeichen einer Datei mit einer Anweisung und drucken Sie alle Inhalte in das Terminal aus:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

ifstream ifs = ifStream ("Dir1/txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
char arr [100];
Ifs.get (arr, 100, '\ 0');
Ifs.schließen(); Cout<
anders
Cout<< "File could not be open!" <Rückkehr 0;

Abschluss

Eine ganze Datei kann in ein Array gelesen werden. In diesem ersten muss die C ++ - Ifstream -Klasse der Fstream -Bibliothek. Die Datei muss zum Lesen geöffnet werden. Lesen Sie alle Zeichen (Bytes) einer Datei (eins nach eins) in das Array, verwenden Sie die Ifstream -Mitgliedsfunktion,

Basic_istream& get (char_type & c)

als Bedingung in einer Weile-Loop. Um alle Zeichen (Bytes) einer Datei zu lesen, in das Array mit einer Ifstream-Mitgliedsfunktion ohne While-Schleife sollte die Ifstream-Mitgliedsfunktion sein:

Basic_istream& get (char_type* s, streamSize n, char_type delim);

Vergessen Sie nicht, die Funktion beim dritten Argument auszutricksen. Mit dieser Funktion muss der Programmierer einige Kenntnisse der möglichen Zeichen in der Datei haben.