Les en fil i en matrise i C ++

Les en fil i en matrise i C ++
Å lese hele filen i en matrise er ikke så vanskelig som den kan høres ut. En fil, enten tekst eller på annen måte, består av byte fra begynnelse til slutt. Bytene kan leses som karakterer. Karakterene kan leses en-for-en i matrisen.

Denne artikkelen forklarer hvordan du kan lese en hel fil i en matrise. C ++ header (bibliotek) fstream, har klassen ifstream. Klassen IfStream har fått () overbelastede medlemsfunksjoner. To av disse overbelastede medlemsfunksjonene kan brukes til å lese hele filen i en matrise. Et program for slik lesing bør begynne med:

#inkludere
#inkludere
ved hjelp av navneområdet STD;

De to første linjene er direktiver, ikke uttalelser. Den første inkluderer Fstream -biblioteket for get () -funksjonene. Den andre inkluderer Iostream -biblioteket for utskrift til terminalen (konsollen) og for å motta tegn fra tastaturet. Den tredje linjen er en uttalelse. Den insisterer på at ethvert navn som ikke er gitt av "STD ::", er av standardnavnet.

Det er et lite problem med get () -funksjonene, matrise lengden må estimeres, for å være minst ett tegn mer enn antall tegn i filen. Tanken er å ha '\ 0' inkludert like etter at den siste leste karakteren i matrisen ville danne en lang streng.

Hvis lengden på matrisen ikke kan estimeres som sådan, må hele filen leses inn i et annet objekt, for eksempel et strengobjekt (i strengklassen). Siden målet med denne artikkelen er å forklare hvordan du kan lese inn i en matrise, må matrisstørrelsen estimeres.

For resten av denne artikkelen antas det at navnet på filen, hvis innhold skal leses, er txtfile.txt, i katalogen, Dir1, i Hjem/brukerkatalog.

Artikkelinnhold

- Lese hele filen karakter-for-karakter

- Les hele filen med en medlemsfunksjon

- Konklusjon

Lese hele filen karakter-for-karakter

Syntaksen til ifstream overbelastet get () -funksjonen, for dette, er:

Basic_istream& get (char_type & c);

Et programkodesegment for å lese neste tegn i filen, er:

char c;
char arr [100];
int i = 0;
mens (ifs.få (c))
arr [i] = c;
i ++;

Den første uttalelsen erklærer variabelen, C vil motta hver av karakterene. Den andre uttalelsen erklærer matrisen som vil motta alle karakterene, en etter en. Den tredje linjen erklærer en indeks for matrisen som begynner fra null for å adressere alle elementene i matrisen, som vil motta et tegn. Med denne tilnærmingen kan '\ 0' legges til etter at den siste karakteren av filen er inkludert i matrisen.

Parentesene til mens-sløyfen har,

ifs.få (c)

hvor hvis er navnet på ifstream -objektet. Neste tegn på filen blir fått av Get -medlemsfunksjonen og tilordnet C. Etter dette ville den interne pekeren til IFstream -objektet peke på karakteren etter den som ble lest. Når slutten av filen er nådd, uttrykket, “IFS.Få (c) ”blir falsk i stedet for sann, og så slutter mens-sløyfen.

Følgende program vil lese alle tegnene i en fil og skrive ut alt innholdet til terminalen:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

ifstream ifs = ifstream ("Dir1/txtfile.txt ", ios_base :: in);
hvis (ifs.is_open () == true)
char c; int i = 0; char arr [100];
mens (ifs.få (c))
arr [i] = c;
i ++;

ifs.Lukk(); arr [i] = '\ 0'; cout<
ellers
cout<< "File could not be open!" <retur 0;

Ifstream som kodet, åpner filen for lesing.

Les hele filen med en medlemsfunksjon

IfStream overbelastet Get () medlemsfunksjon for å lese hele filen, uten stundsløyfen, er:

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

Den leser fortsatt hele filtegn-for-karakteren, men det er ikke lenger virksomheten til C ++ -programmereren. Denne funksjonen legger også til null -tegnet, '\ 0' på vegne av programmereren, forutsatt at N er minst ett tegn lenger enn innholdet i filen.

Det første argumentet for denne overbelastede get () -funksjonen er matrisen med de samme begrensningene (inkludert estimering) som ovennevnte matrise for å motta alle tegnene på filen. Det andre argumentet, N, av StreamSize -typen er et estimat av antall tegn i filen. Det anbefales å lage størrelsen på matrisen og n, det samme. Det er ikke behov for en stug-loop med denne medlemsfunksjonen.

Nå ender en linje i en tekstfil med rømningssekvensen, '\ n'. Hvis det tredje argumentet er '\ n', vil bare den første linjen i filen bli lest. Så funksjonen må bli lurt med noen karakter som sannsynligvis ikke blir funnet i filens innhold. En god kandidat for det tredje argumentet, er '\ 0'. Med denne overbelastede medlemsfunksjonen, må programmereren ha en viss kunnskap om de mulige tegnene i filen for ikke å bruke et tegn som er en del av innholdet i filen.

Følgende program vil lese alle tegnene i en fil med en uttalelse og skrive ut alt innholdet til terminalen:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

ifstream ifs = ifstream ("Dir1/txtfile.txt ", ios_base :: in);
hvis (ifs.is_open () == true)
char arr [100];
ifs.få (arr, 100, '\ 0');
ifs.Lukk(); cout<
ellers
cout<< "File could not be open!" <retur 0;

Konklusjon

En hel fil kan leses inn i en matrise. Denne først av alt trenger C ++ ifstream -klassen i Fstream -biblioteket. Filen må åpnes for lesing. For å lese alle tegnene (byte) av en fil (en etter en) i matrisen, bruk IfStream -medlemsfunksjonen,

Basic_istream& get (char_type & c)

som tilstanden i en stund-loop. For å lese alle tegnene (byte) av en fil, inn i matrisen med en IFstream-medlemsfunksjon uten While-Loop, skal IFStream-medlemsfunksjonen være:

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

Ikke glem å lure funksjonen ved det tredje argumentet. Med denne funksjonen må programmereren ha litt kunnskap om mulige tegn i filen.