Pliki a tablice. Część 2

Materiał jest kontynuacją tematu Pliki a tablice. Część 1. W tej części przedstawię podejście do odczytu tablic z pliku przy założeniu, że w pliku jest zapisana jedna tablica, a pierwszy wiersz zawiera informację o rozmiarze tablicy (patrz poniższa ilustracja).

zapis tablic do pliku Visual Studio C#

Zapis tablic do pliku z podaniem rozmiaru

Przyjmujemy, że pierwszy wiersz zawiera informację o rozmiarze tablicy. Tablicę jednowymiarową zapiszemy w jednym wierszu z separatorem spacji. Dla dwuwymiarowej podobnie. Poniżej odpowiednie kody funkcji

Wskazówka:


void ZapiszTabliceDoPlikuZRozmiarem(StreamWriter p, int[] t)
{
    //przed danymi tablicy zapisz rozmiar tablicy jednowymiarowej
    p.WriteLine(String.Format("{0} ", t.GetLength(0)));
    int i = 0;
    //zmienna p to strumień klasy plik
    do
    {
        p.Write(String.Format("{0} ", t[i]));
        i++;
    } while (i < t.GetLength(0));
}
//przeciążenie powyższej funkcji
void ZapiszTabliceDoPlikuZRozmiarem(StreamWriter p, int[,] t)
{
    //przed danymi tablicy zapisz rozmiar tablicy dwuwymiarowej
    p.WriteLine(String.Format("{0} {1} ", t.GetLength(0), t.GetLength(1)));
    int i = 0;
    //zmienna p to strumień klasy plik
    do
    {
        //zapamietaj jeden wiersz tablicy dwuwymiarowej
        string s = "";
        for (int j = 0; j < t.GetLength(1); j++)
            s += String.Format("{0} ", t[i, j]);
        //zapisz i przejdź do nowego wiersza
        p.WriteLine(s);
        i++;
    } while (i < t.GetLength(0));
}

Poniżej przykładowe rozwiązanie zapisu jednowymiarowej tablicy w kolejnych liniach pliku. Przy tym podejściu nie trzeba używać znaku separatora. Pierwszy wiersz przechowuje informację o rozmiarze tablicy jednowymiarowej

Wskazówka:


//false- nadpisze plik jak istnieje
//true- dopisze do pliku jak istnieje
StreamWriter plik = new StreamWriter(saveFileDialog1.FileName, false);
//przed danymi tablicy zapisz rozmiar tablicy jednowymiarowej
plik.WriteLine(String.Format("{0}", tab1.GetLength(0)));
int i = 0;
do
{
    plik.WriteLine(String.Format("{0}", tab1[i]));
    i++;
} while (i < tab1.GetLength(0));
plik.Close();

Odczyt tablic z pliku z podanym rozmiarem

W każdym z odczytów danych musimy pamiętać o przyjętym sposobi zapisu danych w plikach. Pierwszy wiersz to rozmiar. Czy tablica zapisana jest w kolumnach czy w wierszach, czy jest jedna w pliku itp.

Metoda odczytu tablicy jednowymiarowej zapisanej w pliku jak poniżej

zapis i odczyt tablic do pliku i z pliku Visual Studio C#

Przykładowy kod

Wskazówka:


//buduj tablice z odczytanych linii pliku tekstowego
StreamReader plik = new StreamReader(openFileDialog1.FileName);
//pierwsza linia to rozmiar tablicy
string roz = plik.ReadLine();
int n = Convert.ToInt32(roz);
tab1= new int[n];
string linia;
//czytaj plik dopóki linie nie są puste
while ((linia=plik.ReadLine()) != null)
{
    string[] s = linia.Split(' ');
    for(int j=0; j< tab1.GetLength(0); j++) tab1[j] = Convert.ToInt32(s[j]);  
}
plik.Close();

Analogicznie dla tablicy dwuwymiarowej zapisanej w pliku tak jak pokazuje poniższa ilustracja.

zapis i odczyt tablic do pliku i z pliku Visual Studio C#

Przykładowy kod

Wskazówka:


//buduj tablice z odczytanych linii pliku tekstowego
StreamReader plik = new StreamReader(openFileDialog1.FileName);
//pierwsza linia to rozmiar tablicy
string[] roz = plik.ReadLine().Split(' ');
int w = Convert.ToInt32(roz[0]);
int k = Convert.ToInt32(roz[1]);
tab2D = new int[w,k];
string linia;
int i = 0;
//czytaj plik dopóki linie nie są puste
while ((linia = plik.ReadLine()) != null)
{
    string[] s = linia.Split(' ');
    for (int j = 0; j < tab2D.GetLength(1); j++) tab2D[i,j] = Convert.ToInt32(s[j]);
    i++;
}
plik.Close();

Zapis tablicy jednowymiarowej w pliku w układzie pojedynczej kolumny

Dla przykładu zapiszemy i odczytamy tablicę jednowymiarową w pliku w jednej kolumnie, w której pierwsza wartość to jej rozmiar.

zapis i odczyt tablic do pliku i z pliku Visual Studio C#

Metoda zapisu

Wskazówka:


//false- nadpisze plik jak istnieje
//true- dopisze do pliku jak istnieje
StreamWriter plik = new StreamWriter(saveFileDialog1.FileName, false);
//przed danymi tablicy zapisz rozmiar tablicy jednowymiarowej
plik.WriteLine(String.Format("{0}", tab1.GetLength(0)));
int i = 0;
do
{
    plik.WriteLine(String.Format("{0}", tab1[i]));
    i++;
} while (i < tab1.GetLength(0));
plik.Close();

Metoda odczytu

Wskazówka:


//buduj tablice z odczytanych linii pliku tekstowego
StreamReader plik = new StreamReader(openFileDialog1.FileName);
//pierwsza linia to rozmiar tablicy
string roz = plik.ReadLine();
int n = Convert.ToInt32(roz);
tab1 = new int[n];
string linia;
int i = 0;
//czytaj plik dopóki linie nie są puste
while ((linia = plik.ReadLine()) != null)
{
    tab1[i] = Convert.ToInt32(linia);
    i++;
}
plik.Close();

Układ kontrolek

Projekt tej aplikacji jest rozwinięciem projektu z poprzedniego tematu. Proponowany układ kontrolek przedstawia poniższa ilustracja

zapis i odczyt tablic do pliku i z pliku Visual Studio C#

Wszystkie przedstawione sposoby zapisu i odczytu plików z tablicami realizowane są przez wybór opcji z menu.

Układ okresowy- kod qr
Układ okresowy

Układ okresowy pierwiastków- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Alkomat- wirtualny test kod qr
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Taklarz- olinowanie stałe kod qr
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz