18. tétel: Statisztika fájlból (4.)

Feladat: Írjon egy programot szöveges környezetben, mely beolvas a VERCUKOR.TXT fájlból adatsorokat. 1 adatsor 1 sorból olvasható. Minden adatsor a következőket tartalmazza: mérés dátuma, a hét napja, napszak, mért érték (ponttal elválasztva). Az egyes adatok üres hellyel vannak elválasztva.
Írja ki a képernyőre, hogy hány mérés történt! Zárja ki az adatsorból a 15 feletti téves mérést! Írja ki a mért értékek átlagát is!
Feltételezheti, hogy a fájl létezik, legalább 1 sor van benne, maximum 100 adatsor várható. Az adatok valódiságát nem kell ellenőriznie. A működő programot és a kódot mutassa be tanárának!

Egy lehetséges megoldás Visual C# nyelven:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;            //Ez kell a fájlműveletekhez

namespace 18tetel
{
    class Program
    {
        struct meres       //Így könnyebb lesz eltárolni a beolvasott adatokat
        {
            public string datum;
            public string hetnapja;
            public string napszak;
            public float ertek;
        }
        
        static void Main(string[] args)
        {
            // 18. tétel: Statisztika fájlból (4.)
            StreamReader bevisz = new StreamReader("VERCUKOR.TXT");
            meres[] adat = new meres[100];
            string s;               //Beolvasáshoz segédváltozó
            int szamol=0;           //Adatsorokat számolja meg. 
            string[] reszek = new string[6];        //Tördeléshez ideális segítség
            do
            {
                szamol++;
                s = bevisz.ReadLine();
                reszek = s.Split(' ');
                adat[szamol].datum = reszek[0];
                adat[szamol].hetnapja = reszek[1];
                adat[szamol].napszak = reszek[2];
                s = reszek[3];
                adat[szamol].ertek = float.Parse(s, System.Globalization.CultureInfo.InvariantCulture);
                if (adat[szamol].ertek>15)
                {
                    szamol--;       //Ezzel érvénytelenítjük a téves beolvasás miatti túl nagy értéket.
                }
            }   
            while (!bevisz.EndOfStream);
     bevisz.Close();
            Console.WriteLine("\nBeolvasott mérések száma: {0}",szamol);
            float osszeg = 0;       //Összegzéshez használt változó
            for (int i = 1; i <=szamol; i++)
            {
                osszeg += adat[i].ertek;
            }
            Console.WriteLine("Mért értékek átlaga: {0,4:.00}",osszeg/szamol);
            Console.WriteLine("\n\nA program futása véget ért!");
        }
    }
}

A VERCUKOR.TXT fájl egy lehetséges tartalma:

2022.01.02., v. du. 6.1
2022.01.04., k. du. 5.2
2022.01.07., p. du. 5.5
2022.01.10., h. du. 5.9
2022.01.13., cs. du. 5.3
2022.01.16., v. du. 6.9
2022.01.18., k. du. 4.9
2022.01.21., p. du. 5.5
2022.01.23., v. du. 5.8
2022.01.25., k. du. 6.0
2022.01.29., szo. du. 5.0
2022.02.02., sze. du. 5.3
2022.02.03., cs. du. 16.1
2022.02.04., p. du. 5.8
2022.02.06., v. du. 5.4
2022.02.09., sze. du. 5.3
2022.02.12., szo. du. 5.1
2022.02.16., sze. du. 4.9
2022.02.20., v. du. 6.2
2022.02.23., sze. du. 5.4
2022.02.28., h. du. 5.0
2022.03.03., cs. du. 5.0
2022.03.07., h. du. 5.9
2022.03.10., cs. du. 5.4
2022.03.12., szo. du. 5.9
2022.03.16., k. du. 5.6
2022.03.18., p. du. 4.9
2022.03.22., k. du. 6.1
2022.03.24., cs. du. 5.3
2022.03.28., h. du. 5.7
2022.03.31., cs. du. 6.2
2022.04.04.. h. du. 5.5
2022.04.08., p. du. 5.2
2022.04.11., h. du. 5.8
2022.04.14., cs, du. 5.0
2022.04.15., p. du. 5.5
2022.04.19., k. du. 5.4
2022.04.22., p. du. 5.5
2022.04.25., h. du. 6.2
2022.04.27., sze. du. 5.2