Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Citanje txt file i parsanje

[es] :: .NET :: Citanje txt file i parsanje

[ Pregleda: 1954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hsl.eu.



+1 Profil

icon Citanje txt file i parsanje08.09.2010. u 08:35 - pre 165 meseci
Pozdrav,

ovako: imam jednu datoteku tipa *.txt. U njoj se nalaze neki tekstualni podaci. Sama struktura izgleda ovako:

Code:

NazifFilea.dat

A00DE34XXXX XXXAFD

100 1255 234 222234455345 5435455 543545345 543545
fdsfdf9fds7z09fdsfds9

101 1255 321 434234234234 4234344 554345455 544555
ffhdsfsdfhsdfkodfsfkdk

102 1255 312 434243243344 4445554 545453234 543544
dsjdsdjdjfdkgjgkk0p4aa

hfsdfhdsdjfsdfjhsdfjhsdjfsdjfhsdjfddfds


Malo da pojasnim:

Prvi i treci red(drugi red je prazan) u datoteci su podaci o datoteci opcenito.
Peti red su neki podaci a sesti red je checksum tog petog reda.

Sedmi red je prazan.Na karaju svakog reda je <CR>i/ili<LF>.

Osmi i deveti su takodjer podaci i cheskum.
Deseti red opet prazan.

Jedanaesti i dvanaesti red opet isto : podaci i checksum tih podataka.

Trinaesti red prazan.

Zadnji red checksum cijelog file-a;
Ovi parova podaci-checksum moze biti neograniceno u datoteci.Tj mogu se ponavljati n puta.Sigurno je da dolaze uvijek u paru.

Ja sada zelim da uradim sledece:


1)Da procitam chesksum koji je na kraju file-a i da provjerim sadrzaj filea da li se poklapa sa tim checksum(Za ovo imam naravno algoritam tako da to nije prob.).
2)Da procitam svaki od tih podataka i da provjerim njegovu checksum.

Moze li mi neko pomoci kako to da uradim?

Hvala

[Ovu poruku je menjao CallMeSaMaster dana 08.09.2010. u 10:29 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 09:26 - pre 165 meseci
Uradi to što želiš, imaš našu dozvolu.
 
Odgovor na temu

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hsl.eu.



+1 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 09:28 - pre 165 meseci
Mislim da je tvoj komentar suvisan!

Jasno je da je ovo forum i da ljudi traze pomoc i ako ne napisu uvijek "Moze li mi neko pomoci...?". Ali evo kad si tako ljubazan da pomognes ja cu editovati svoje pitanje.

U svakom slucaju hvala.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 09:37 - pre 165 meseci
Redovi koji se ne ponavljaju su zaglavlje fajla, i čitaju se jednom. Redovi koji se ponavljaju se čitaju u petlji dokle god ima št ada se čita. Mogao bi recimo ceo fajl da pročitaš sa File.ReadAllLines, i dobio bi niz stringova. Prvih par stringova rešavaš van petlje, ostalo rešavaš u petlji. Svaki string možeš da razdvojiš na sastojke sa String.Split koji takođe daje niz stringova. Ostalo je stvar algoritma, za koji reče da nije problem.

I da, izvini za ironiju. Mislio sam da je u pitanju neki od C/C++ foruma, a tamo pokušavam da usmerim ljude da postavljaju konkretna pitanja. Odgovor na višeznačno pitanje po prirodi stvari ne može biti konkretan, a da i ne govorimo o slučaju kad pitanja i nema. Ne znam koliko se na .NET forumu to toleriše.
 
Odgovor na temu

CallMeSaMaster

Član broj: 43611
Poruke: 466
*.hsl.eu.



+1 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 09:42 - pre 165 meseci
Problem je u tome sto je i zadnji red u fajlu samo jednom. Znaci prva tri i zadnji.

Kako da znam da znam na kojoj sam liniji i da nisam na zadnjoj?
Prvo bih trebao procitat zadnju liniju i cheksum uporediti sa sadrzajem file-a. Znaci procitat sve do zadnje linije i iz toga izvuci cheksum, a zatim uporediti. Ako je ok onda ici dalje.

Bio bih ti zahvalan ako bi imao neki kraci primjer :-)
 
Odgovor na temu

lonelyrider_44
Zrenjanin

Član broj: 42310
Poruke: 445
109.94.104.*



+20 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 10:07 - pre 165 meseci
Code (csharp):

        private string checksum(string data)
        {
            //To do
            return "";
        }

        private bool verifyFile(string path)
        {
            //ucitavanje sadrzaja datoteke u listu stringova
            Stream s = File.OpenRead(path);
            StreamReader tr = new StreamReader(s);
            List<string> lines = new List<string>();
            while (!tr.EndOfStream)
            {
                lines.Add(tr.ReadLine());
            }
            tr.Close();

            //provera checksum-a celog fajla ovde
            //lines[lines.Count-1] <-- checksum celog fajla
            //if (checksumCelogFajla==true){
            //provera checksum-a podataka
            if (lines.Count > 5)//uslov da u file-u ima neshto vishe od opshtih informacija
            {
                for (int i = 5; i < lines.Count - 1; i += 3)
                {
                    string chksum = checksum(lines[i]);
                    if (chksum != lines[i + 1])
                        return false;
                }
            }
           //}
            else
                return false;

            return true;
        }
 


Ovo ti je otprilike kako bih ja uradio. U for petlji pochetna vrednost treba da bude prvi red od kog pochinje podatak. Ako nije 5, onda to promeni. Ne znam na osnovu chega radish checksum celog fajla, pa sam ostavio sam komentar na tom mestu, a shto se tiche checksum-a pojediinachnih linija, ovde je uradjeno da se on odredjuje u zasebnoj f-ji, ali ako je u pitanju neshto prosto, onda mozesh to da radish i unutar for petlje. I shta se deshava ako imash samo zaglavlje ? da nema podataka. Ako je checksum ispravan, onda verovatno treba da se vrati true. U tom sluchaju, ovde onda fali josh jedan if, oko provere checksum-a podataka (taj pod komentarom). I meni je prvo palo na pamet ReadAll, samo u ovoj klasi (ili TextReader-u) ima f-ja ReadAll, ali vraca string, a ne string[], pa bi to trebalo razdvajati, zato sam uradio preko liste.

PS. Mislim da je kljucna stvar u tome da prebacish sve podatke iz fajla u niz ili listu. Onda cesh moci da znash gde je zadnji red.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 10:23 - pre 165 meseci
Pošto metoda File.ReadAllLines (pogedaj je u MSDN-u) vraća niz stringova onda je lako uzeti poslednji string u to nizu:

String[] linije = File.ReadAllLines(@"ime_fajla.txt");
String poslednjaLinija = linije[linije.Length - 1];
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 21:06 - pre 165 meseci
ReadAllLines nije praktican ako je veliki fajl.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Citanje txt file i parsanje08.09.2010. u 21:46 - pre 165 meseci
Da, to je istina. Ako je do par megabajta onda je dobar. Ako je više od 100 MB onda treba razmisliti da li ga čitati odjednom (moguće je, ali treba testirati performanse). Ako je preko 1GB onda ReadAllLines nije dobra ideja.
 
Odgovor na temu

[es] :: .NET :: Citanje txt file i parsanje

[ Pregleda: 1954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.