Jump to content

[C++] Citire vector din fişier


ChaWder
 Share

Recommended Posts

ZQYA55Y.png

Dacă eşti un pasionat al C++-ului sau pur şi simplu ai nevoie pentru la şcoală, sau mai mult, dai bacalaureatul la informatică, sunt aici pentru a te ajuta.
Să presupunem că avem un fişier numit "vect.txt" (de la "vector" + extensia clasică pentru fişierele text: ".txt" *funcţionează pentru orice fel de nume şi orice fel de extensie, însă extensia nu trebuie să fie mai lungă decât 3 caractere).
Acest fişier conţine o serie de numere, despărţite prin spaţiu (vector).

1 2 3 5 4 6 3 2 5 


Vrem să realizăm un program care să memoreze conţinutul fişierului într-un vector, nu doar să afişeze pe ecran elementele acestuia. Pentru asta, tehnica mea este următoarea:
declarăm un număr întreg care va lua valori de la 0 în sus (pozitive) ce va reprezenta numărul de caractere prezente în fişier (în afară de spaţii sau enter). Personal am numit această variabilă "caractere".

int v[100], i, caractere=0;

Trebuie ori declarată cu valoarea iniţială 0, ori dată ulterior valoarea 0, întrucât vom folosi incrementarea acestei variabile pentru fiecare caracter întâlnit în fişier. De asemenea, nu uitaţi de declararea streamului pentru fişier:

ifstream f("vect.txt");

ifstream vine de la "In File STREAM" . Asociaţi asta cu luarea informaţiilor din fişier (programul intră în fişier pentru a lua cele necesare).

Accesarea propriu-zisă a fişierului după declararea acestuia, personal o fac folosind instrucţiunea repetitivă WHILE (cât timp)

while(!f.eof())
{
//instructiuni
}


while = cât timp
! = diferit = nu e adevarat 
f = variabila fişier declarată mai sus prin ifstream f("vect.txt");
.eof() = metoda prin care detectăm finalul fişierului. "eof" vine de la "end of file"
!f.eof() = cât timp citesc din fişier şi acesta nu s-a terminat. Această instrucţiune va lua caracter cu caracter din fişier, astfel vom putea face operaţii cu ele.

Observăm că am declarat deci vectorul "v", număul de caractere ale fişierului "caractere", contuarul "i" şi fişierul "f".

while(!f.eof())
{
caractere++;
f>>v[caractere];
}


ce face acest set de instrucţiuni?
traducere:


cât timp nu e sfârşitul fişierului execut instrucţiunile:
{
incrementez variabila caractere cu 1
scot din fişier caracterul curent ( luând caracter cu caracter prin while(!f.eof()) ) şi îl memorez în vectorul v pe poziţia "caractere"
}


să presupunem deci că avem 3 numere în fişier: 5 7 8

caractere = 0; // iniţial, înainte să începem citirea din fişier
while(!f.eof())
{
caractere++;
f>>v[caractere];
}

 
caractere++;   // caractere devine 1 prima data
f>>v[caractere];  // caractere fiind 1, pe poziţia 1 a vectorului "v", se va memora primul număr întâlnit, adică 5
caractere++;   // caractere devine 2 după ce se ajunge la al doilea caracter
f>>v[caractere];  // caractere fiind 2 acum, pe poziţia 2 a vectorului "v", se va memora al doilea număr întâlnit, adică 7
caractere++;   // caractere devine 3 după ce ajunge la al treilea caracter
f>>v[caractere];  // caractere fiind 3, pe poziţia 3 a vectorului "v", se va memoraal treilea număr întâlnit, adică 8


nu mai sunt numere, deci s-a ajuns la finalul fişierului, deci se iese din instrucţiunea repetitivă "while"
acum nu mai rămâne de făcut decât să afişăm elementele vectorului.

for(i=1;i<=caractere;i++)
{
cout<<v<<" ";
}


am început să memorăm caracterele de la poziţia 1, deci le citim pornind de la poziţia 1. Contoarul "i" ia valori până la "caractere". (adică avem 3 caractere în exemplul dat mai sus cu 5 7 8, pornim de la 1 până la 3).

Codul sursă de la programul în care avem screenshotul de mai sus:

 

hWOuOjd.png

Link to comment
Share on other sites

Acest topic este postat la o sectiune gresita, asa dar ii voi da move.

 

Topic Moved

:topic_closed:

Edited by TheLittle
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.