Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Tiedostojen Lukeminen StreamReader-Luokalla | Tietorakenteet ja Tiedostojen Käsittely
C# Perusteiden Jälkeen

bookTiedostojen Lukeminen StreamReader-Luokalla

Voit avata ja lukea tiedostoja C#-ohjelmointikielellä.

Tiedoston lukemista varten luodaan uusi StreamReader-olio. StreamReader olio ottaa tiedoston polun parametrina.

Note
Huomio

Käsite "olio" selkeytyy myöhemmissä osioissa, mutta ymmärtämisen kannalta – olio on yksinkertaisesti tietotyypin ilmentymä, ja StreamReader on tietotyyppi aivan kuten int tai float. Esimerkiksi arvot 1, 2.5f ja "Hello World" voidaan teknisesti kutsua int-, float- ja string-tietotyyppien "olioiksi".

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Tässä fileVarName edustaa muuttujan nimeä, johon tallennat StreamReader-olion, ja fullPath tarkoittaa tiedoston koko polkua merkkijonona.

Esimerkiksi voit avata tiedoston "text.txt" työpöydältä, jonka polku on C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Huomio

Voit myös käyttää implisiittistä määrittelyä tehdäksesi syntaksista hieman lyhyemmän: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Oletetaan, että tiedostossa text.txt on seuraava sisältö:

text.txt

text.txt

copy
12345
This is some example text

StreamReader-oliossa on ReadLine-metodi, joka lukee yhden rivin tiedostosta ja palauttaa sen:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Tuloste:

This

ReadLine-metodi siirtää automaattisesti kohdistimen seuraavalle riville, joten kun sitä kutsutaan uudelleen, se lukee seuraavan rivin, jos sellainen on olemassa. Muussa tapauksessa se palauttaa null (ei mitään):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Tuloste:

This
is
some
example
text

Kaikkien rivien lukemiseen tiedostosta voidaan käyttää while-silmukkaa, jonka ehtona tarkistetaan, onko seuraava rivi null vai ei. Seuraavassa on yksinkertainen tapa toteuttaa tämä:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Tuloste:

This
is
some
example
text

Yllä olevaa koodia voi tehdä hieman siistimmäksi käyttämällä erästä kikkaa, joten tarkastellaanpa sijoituslauseita. Sijoituslauseella on myös palautusarvo, joka on sille annettu arvo. Tämä voidaan ymmärtää esimerkin avulla:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Tuloste:

7

Tulostaa 7, koska lauseke a = 7 palauttaa arvon 7, joka on muuttujaan a asetettava arvo.

Tätä tietoa voi hyödyntää esimerkiksi asettamalla saman arvon usealle muuttujalle yhdellä lauseella:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Tuloste:

9
9
9

Tämän tiedon avulla voit muokata tiedostonluku-koodia lyhyemmäksi poistamalla tarpeettoman koodin:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Ehtolauseessa käytettiin ensin sijoituslausetta line = textFile.ReadLine(), joka päivittää automaattisesti line-muuttujan ja tarkistaa sitten, onko se null lausekkeen palautusarvosta.

Tiedoston lukemisen jälkeen se täytyy myös sulkea Close-metodilla, muuten se voi mahdollisesti aiheuttaa muistivuotoja tai tiedosto voi jäädä lukituksi ja estää pääsyn muista paikoista niin kauan kuin ohjelma on käynnissä.

Lopullinen koodi näyttää tältä:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.04

bookTiedostojen Lukeminen StreamReader-Luokalla

Pyyhkäise näyttääksesi valikon

Voit avata ja lukea tiedostoja C#-ohjelmointikielellä.

Tiedoston lukemista varten luodaan uusi StreamReader-olio. StreamReader olio ottaa tiedoston polun parametrina.

Note
Huomio

Käsite "olio" selkeytyy myöhemmissä osioissa, mutta ymmärtämisen kannalta – olio on yksinkertaisesti tietotyypin ilmentymä, ja StreamReader on tietotyyppi aivan kuten int tai float. Esimerkiksi arvot 1, 2.5f ja "Hello World" voidaan teknisesti kutsua int-, float- ja string-tietotyyppien "olioiksi".

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Tässä fileVarName edustaa muuttujan nimeä, johon tallennat StreamReader-olion, ja fullPath tarkoittaa tiedoston koko polkua merkkijonona.

Esimerkiksi voit avata tiedoston "text.txt" työpöydältä, jonka polku on C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Huomio

Voit myös käyttää implisiittistä määrittelyä tehdäksesi syntaksista hieman lyhyemmän: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Oletetaan, että tiedostossa text.txt on seuraava sisältö:

text.txt

text.txt

copy
12345
This is some example text

StreamReader-oliossa on ReadLine-metodi, joka lukee yhden rivin tiedostosta ja palauttaa sen:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Tuloste:

This

ReadLine-metodi siirtää automaattisesti kohdistimen seuraavalle riville, joten kun sitä kutsutaan uudelleen, se lukee seuraavan rivin, jos sellainen on olemassa. Muussa tapauksessa se palauttaa null (ei mitään):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Tuloste:

This
is
some
example
text

Kaikkien rivien lukemiseen tiedostosta voidaan käyttää while-silmukkaa, jonka ehtona tarkistetaan, onko seuraava rivi null vai ei. Seuraavassa on yksinkertainen tapa toteuttaa tämä:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Tuloste:

This
is
some
example
text

Yllä olevaa koodia voi tehdä hieman siistimmäksi käyttämällä erästä kikkaa, joten tarkastellaanpa sijoituslauseita. Sijoituslauseella on myös palautusarvo, joka on sille annettu arvo. Tämä voidaan ymmärtää esimerkin avulla:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Tuloste:

7

Tulostaa 7, koska lauseke a = 7 palauttaa arvon 7, joka on muuttujaan a asetettava arvo.

Tätä tietoa voi hyödyntää esimerkiksi asettamalla saman arvon usealle muuttujalle yhdellä lauseella:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Tuloste:

9
9
9

Tämän tiedon avulla voit muokata tiedostonluku-koodia lyhyemmäksi poistamalla tarpeettoman koodin:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Ehtolauseessa käytettiin ensin sijoituslausetta line = textFile.ReadLine(), joka päivittää automaattisesti line-muuttujan ja tarkistaa sitten, onko se null lausekkeen palautusarvosta.

Tiedoston lukemisen jälkeen se täytyy myös sulkea Close-metodilla, muuten se voi mahdollisesti aiheuttaa muistivuotoja tai tiedosto voi jäädä lukituksi ja estää pääsyn muista paikoista niin kauan kuin ohjelma on käynnissä.

Lopullinen koodi näyttää tältä:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 6
some-alt