In acest articol, vom lucra un exemplu in care vom folosi o colectie, un dictionar cu perechi de chei de tip int si valori de tip string, dictionar care va fi construit pe baza a ceea ce introduce utilizatorul de la tastatura. Dupa crearea lui, il vom salva intr-un fisier text pe hard. Apoi vom citi colectia din fisierul text.
Vom alege un proiect de tip Console Application si vom explica notiuni care nu au fost introduse pana acum.
Construim clasa DictionarExemplu, care va avea ca metode NumarElemente, CreeazaDictionar, SalveazaDictionar, CitesteDictionar.
Mai intai, in interiorul clasei, declaram un obiect de tip Dictionary<int,string>:
//declarare obiect de tip Dictionary Dictionary<int, string> catalog = null;
Acest obiect catalog va fi folosit in metodele CreeazaDictionar si SalveazaDictionar.
//functia de preluare a caracterelor de la tastatura public int NumarElemente() { //cat timp vor fi introduse caractere de la tastatura while (true) { //retinem caracterul char ch = Console.ReadKey().KeyChar; //vom retine numarul in aceasta varabila int result; //daca e numar, il returneaza functiei principale if (int.TryParse(ch.ToString(), out result)) { Console.WriteLine(""); //retunreaza numarul return result; } } }
Aceasta metoda din clasa DictionaryExemplu, va prelua caracterele introduse de utilizator, iar daca va gasi numar, il va returna functiei Main. Pe acest numar il vom folosi pentru a sti cate elemente va avea dictionarul pe care vrem sa il construim.
//functia pentru construirea dictionarului public void CreeazaDictionar(int numarPersoane) { catalog = new Dictionary<int, string>(); //numarul de elemente va fi egal cu numarul primit de la tastura for (int i = 0; i < numarPersoane; i++) { Console.WriteLine("Nume pentru persoana {0}", i); string nume = Console.ReadLine(); //adaugam in dictionar iteratia la care a ajuns i //si numele primit de la tastatura la iteratia respectiva catalog.Add(i, nume); } Console.WriteLine("Dictionarul a fost creat."); }
Metoda CreeazaDictionar va primi ca parametru numarul de elemente returnat de functia NumarElemente si care va reprezenta numarul de elemente al dictionarului. Intr-o iteratie, vom adauga cate un element dictionarului catalog cu ajutorul functiei Add (vezi articolul despre Dictionary<K,V>), fara a depasi numarul maxim de elemente, numarPersoane. Vom afisa un mesaj de confirmare dupa construirea dictionarului.
//functia salveaza dictionarul intr-un fisier public void SalveazaDictionar() { //creeaza fisierul la calea pe StreamWriter fisierIesire = File.CreateText("C:\\dictionar.txt"); //parcurgem dictionarul foreach (KeyValuePair<int, string> el in catalog) { //scriere textului in fisier fisierIesire.Write("(" +el.Key+","); fisierIesire.WriteLine(el.Value+")"); } //inchiderea fisierului fisierIesire.Close(); Console.WriteLine("Dictionarul a fost salvat in fisier text."); }
Metoda SalveazaDictionar va salva dictionarul catalog creat de metoda CreeazaDictionar si cu ajutorul clasei StreamWriter din spatiul de nume System.IO, despre care vom discuta intr-un viitor articol, dictionarul catalog va fi salvat sub forma unui fisier text, la calea data ca parametru metodei CreateText. Daca vom naviga la acea cale, vom gasi un fisier text, cu numele dictionar.txt, care va contine colectia catalog.
//citeste textul dintr-un fisier public void CitesteDictionar() { //deschidem fisierul pentru a citi din el StreamReader fisierIntrare = File.OpenText("C:\\dictionar.txt"); //definim o variabile string care va parcurge fisierul pana la final string x; //cat timp linia citita nu este goala while ((x = fisierIntrare.ReadLine()) != null) { //scrie in consola Console.WriteLine(x); } //inchidem fisierul fisierIntrare.Close(); Console.WriteLine("Dictionarul a fost citit din fisierul text."); }
Metoda CitesteDictionar, cu ajutorul clasei StreamReader, din acelasi spatiu de nume, System.IO, va deschide fisierul text a carei cale a fost transmisa ca parametru metodei OpenText, apoi va parcurge fisierul dictionar.txt si va scrie in consola fiecare sir de caractere gasit.
In metoda Main din clasa Program a proiectului, declaram si instantiem clasa DictionarExemplu:
DictionarExemplu dictionarExemplu = new DictionarExemplu();
Preluam numarul de elemente primit de la utilizator:
int numarElem = dictionarExemplu.NumarElemente();
Vom transmite numarul functiei responsabila cu crearea dictionarului:
dictionarExemplu.CreeazaDictionar(numarElem);
Daca se doreste salvarea dictionarului creat in format txt pe hard:
dictionarExemplu.SalveazaDictionar();
Daca se doreste citirea dictionarului din fisierul text in care a fost salvat:
dictionarExemplu.CitesteDictionar();
Acesta a fost un exemplu scurt, practic, despre construirea unei colectii – dictionar (puteam alege, foarte simplu, din cele prezentate in articolele precedente, List sau ArrayList) si salvarea ei sub forma unui fisier text, pe hard, intr-o locatie specificata de noi. De asemenea, am construit si o functie care sa citeasca dintr-un fisier text, continutul colectiei noastre.
In articolul viitor, vom prezenta interfata IEnumerator.
Pentru a descarca in format rar codul integral folosit in articolul curent – click aici!