Input/Output a C#-ban

Adatok beolvasását és kiírását beépített könyvtári szolgáltatások biztosítják számunkra. Console alkalmazások készítésekor a billentyűzetről történő beolvasást és a képernyőre történő kiírást a System névtér a Console osztálya teszi lehetővé. A fájlból való olvasást, illetve fájlba történő írást a System.IO névtér osztályainak felhasználásával érjük el. A leírásban csak szöveges fájlok kezelésével foglalkozunk. Érdemes megjegyezni, hogy tizedes törtek beolvasásakor tizedes vesszőként a Windows beállításaiban megadott karaktert kell használni.
Számunkra a követkesző függvények fontosak:
Read() egy karaktert olvas, és a beolvasott karakter kódját, mint egész számot adja eredményül.
ReadLine() egy sort olvas be, az eredmény a beolvasott adat, mint szöveg.
Write() kiírja a paraméterül kapott adatokat.
WriteLine() ugyancsak kiírja a paraméterül kapott adatokat, majd új sort kezd.

Adatbeolvasás a billentyűzetről, adatkiírás a képernyőre

Leggyakrabban a Console.ReadLine() függvényt használjuk. A billentyűzetről történő adatbevitelt mindig az Enter leütésével kell lezárni. Ha a beolvasott adatot nem szövegként akarjuk kezelni, gondoskodni kell a megfelelő átkonvertálásról. Ha egy sorban több adat szerepel valamilyen elválasztó karakterrel, akkor a beolvasás után megfelelően szétdaraboljuk az elválasztó karakterek mentén a sort.
Console alkalmazások esetén a programablak becsukódását lehet megakadályozni a Console.ReadKey() függvénnyel, ez valamilyen billentyű leütését érzékeli és addig várakoztat, amíg ez meg nem történik.
Kiírásra a Console.Write(), illetve a Console.WriteLine() függvényeket használjuk, a zárójelben a kiírandó adatokat kell megadni. Ha a Write() függvényt alkalmazzuk, akkor a rákövetkező kiírás folytatólagosan történik, ha a WriteLine() függvényt, akkor a rákövetkező kiírás mindig új sorba kerül. A kiírás tagolására, valamint speciális jelek megjelenítésére az escape szekvenciákat használjuk.
1. példa: Beolvassuk egy egész, egy valós és egy szöveg típusú változó értékét a billentyűzetről, a három adat egyenként kerül beolvasásra:

  int egész;
double valós;
string szöveg;
Console.Write("Az egész változó értéke: ");
egész = Convert.ToInt32(Console.ReadLine()); // a beolvasott adatot 32 bites egésszé konvertáljuk Console.Write("A valós változó értéke: "); valós = Convert.ToDouble(Console.ReadLine()); // dupla pontosságú valós számmá konvertáljuk a beolvasott adatot Console.Write("A szöveg változó értéke: "); szöveg = Console.ReadLine();

2. példa: Beolvasunk 5 valós számot úgy, hogy a számokat egy sorba írjuk, egy szóközzel elválasztva egymástól. Egyetlen ReadLine() hívással olvassuk be az adatokat, a beolvasott szövegként kezelt sort a szóközök mentén darabokra törjük, és a darabokat számmá konvertáljuk.

double[] valós5 = new double[5];
string[] darabok = new string[5];
string sor;
char[] elválasztó =new char[]{' '};
Console.WriteLine("Írj 5 valós számot egymás után egy szóközzel elválasztva!");
sor = Console.ReadLine();
darabok = sor.Split(elválasztó);
for (int i = 0; i < 5; i++)
{
valós5[i] = Convert.ToDouble(darabok[i]);
Console.WriteLine(valós5[i]);
}

A Write(szöveg, adat, ...) illetve WriteLine(szöveg, adat, ...) módon paraméterezett kiírásokkal előre formázott megjelenést érhetünk el. A szövegben kapcsos zárójelek közé írt sorszámmal, és a formázást meghatározó karaktersorozattal jelezzük, a kiírandó adatok helyét és formátumát a következő alakban:
{sorszám[, szélesség][:forma]}
A [] közötti részek elhagyhatók. A sorszám azt jelöli, hogy a szöveg után felsorolt adatok közül hányadikat kell kiírni. Itt is 0-val kezdődik a sorszámozás. A szélesség, ha van, a teljes szélességet határozza meg. Ha pozitív, akkor jobbra, ha negatív, akkorbalra igazítva jeleníti meg az adatot a szélességen belül. Ha az adat rövidebb a megadott szélességnél, akkor szóközökkel tölti fel a szabadon maradt helyet. A kettőspont utáni rész, ha van, a kiírandó adat típusát és formáját szabályozza. A következő karaktereket használja:

c pénznembeli kijelzés
e tudományos kijelzés
x hexadecimális forma
0 mindig megjelenítendő helyiérték
# csak akkor jeleníti meg, ha van ott érték
. a tizedes vessző helye

Pl.:
int i = 310, k = 256;
float g = 9.81F;
Console.WriteLine("Az i változó értéke: {0}\nA k változó éréke: {1}", i, k);
// A 310 a {0}, a 256 a {1} helyére kerül, \n új sort kezd Console.WriteLine("A számla értéke: {0:c}", i); // 310,00 Ft Console.WriteLine("16-os számrendszerben k értéke: {0,6:x}", k); // 6 karakter széles 16-os számrenszerbeli kijelzés ( 100) Console.WriteLine("A g változó értéke: {0,10:00.000}", g); // 10 karakter széles kijelzés 3 tizedes jeggyel ( 09,810) Console.WriteLine("A g változó értéke:{0:0.00e+0}", g); // 9,81e+0

Szövegfájlok használata

Ahhoz hogy szöveges fájlokkal kapcsolatos műveleteket tudjunk végezni, a System.IO névtér StreamReader illetve StreamWriter osztályaira van szükségünk. Ha egy szövegfájból adatokat akarunk beolvasni, akkor egy StreamReader típusú objektumot hozunk létre, ha adatokat szeretnénk írni egy fájlba, akkor StreamWriter típusú objektumot használunk.
3. példa: Létrehozunk a készülő programunk könyvtárában egy szöveg.txt nevű szövegfájlt. Beleírunk két sort aztán a fájl tartalmát soronként kiírjuk a képernyőre. Végül hozzáírunk a már létező fájhoz még egy sort.

string név = "szöveg.txt";
StreamWriter ki = new StreamWriter(név);
// létrehoz egy szöveg.txt fájlt a program könyvtárában, ha már van ilyen, akkor fölülírásra nyitja meg. ki.Write("Ez az első sor eleje"); ki.WriteLine(", itt jön az első sor folytatása és vége."); ki.WriteLine("Ez itt új sorba kerül."); ki.Close(); StreamReader be = new StreamReader(név); string sor; do { sor = be.ReadLine(); Console.WriteLine(sor); } while (!be.EndOfStream); be.Close(); ki = new StreamWriter(név, true); // megnyitja a már létező szöveg.txt fájlt, a kiírás hozzáfűződik a korábbi tartalomhoz.
ki.WriteLine("Hozzáírunk a már létező fájlhoz egy újabb sort.");
ki.Close();
Fájlokat elérési úttal együtt is megadhatunk, a string típusnál leírt módon. A File.Exists() függvény megadja, hogy egy fájl létezik-e, vagy sem.

Vissza a tartalomjegyzékhez