Program public static void NovaDatoteka(string datNavodila, string novaDatoteka="rezultat.txt")
za vhodna parametra sprejme dva niza – prvi pove s katere datoteke bomo brali navodila za kreiranje datoteke, ki jo podamo v drugem nizu. Vnos prvega parametra je obvezen, drugi ima privzeto vrednost.
V programu najprej preverimo obstoj datoteke z navodili. Če ni vnesena pravilna pot do te datoteke, ponudimo možnost novega vnosa. Ko podamo nov vnos, še enkrat kličemo program NovaDatoteka z vnesenim nizom. Tako se stvar ponavlja, dokler ni vnesena tekstovna datoteka s točno lokacijo.
Po podani ustrezni datoteki najprej poiščemo mapo, v kateri se datoteka nahaja. To uporabimo pri kreiranju nove datoteke – datoteka z rezultatom se tako nahaja v isti mapi kot datoteka z navodili.
Nato ustvarimo podatkovni tok za branje po datoteki navodil in podatkovni tok za pisanje na datoteko rezultat.
Preden poženemo zanko, s katero bomo pregledali vrstice navodil, deklariramo:
- niz, v katerega bomo shranili ime datoteke, ki je zapisano v tekoči vrstici;
- tabelo nizov, v katerih bomo hranili vrstice datoteke, ki jih bomo »prekopirali« v datoteko rezultat.
Deklaracija je potrebna pred »try, catch« konstruktom, ki ga bomo uporabili v zanki za preverjanje, če se med imenom in številkam nahaja dvopičje.
Ustvarimo še števec »ind«, s katerim bomo izpisali v kateri vrstici se nahaja napaka in ki bo pomagal, da se tekst s podatki o uporabljenih datotekah izpiše samo enkrat – samo ko je ind enak 1.
Sledi zanka po vseh vrsticah datoteke navodila. Tako za zanko spišemo »try, catch« konstrukt. V try preverimo, če lahko ime datoteke in vrstice v datoteki shranimo v predhodno deklariran niz in tabelo nizov.
Vrstico razdelimo glede na podpičje. Niz na prvem mestu je ime datoteke, na drugem pa številke, ki označujejo vrstice v tej datoteki. Načeloma imena datoteke dobimo v vsakem primeru, pri shranjevanju števil v tabelo nizov pa lahko pride do težav, če ime datoteke in številke vrstic med seboj niso ločene s podpičjem. V takem primeru sprožimo izjemo, kjer uporabimo indeks ind, ki nam pove v kateri vrstici na vhodni datoteki navodil je napačen zapis.
Naslednje preverjanje, ki sledi neposredno, je obstoj datoteke, katere ime smo shranili v niz. Datoteka se mora nahajati v isti mapi kot navodila. Če datoteka ne obstaja, na konzolo izpišemo v kateri vrstici imamo napačno podano ime datoteke in ustavimo izvajanje zanke. Pred tem še zbrišemo datoteko rezultati.
Če so vsi podatki v vrstici ustrezno zapisani, se pripravimo na zapisovanje v novo datoteko. Vsebino datoteke dobimo s pomočjo še enega podatkovnega toka za branje. Z metodo »ReadToEnd()« preberemo celotno vsebino datoteke. Vsebino shranimo v novo tabelo nizov, ločimo je glede na skok v novo vrsto.
Znotraj zanke ustvarimo še eno zanko, tokrat zanko for, ki bo tekla po tabeli nizov, kjer hranimo številke vrstic. Številko vrstice shranimo v niz. Temu nizu odstranimo vse bele znake in ga ločimo glede na pomišljaj – v primeru da imamo podan interval vrstic potrebujemo začetno in končno vrednost tega intervala. Ker bomo pretvarjali niz v število še nimamo garancije, da je v nizu število (lahko se poleg številk nahaja tudi kak znak), zato nastavimo še en »try, catch« konstrukt, ki nam bo prestregel napake pri metodi Parse. V takem primeru vržemo izjemo, javimo kje v datoteki navodil smo naleteli na napako (s pomočjo indeksa ind in indeksa i nazadnje definirane for zanke).
Če imamo stvari zapisane kot je treba, sledi zapis na novo datoteko.
Nad celotno for zanko zanko je obešen še en »try, catch«, ki pa preverja, da kakšno število ni večje od števila vrstic v datoteki. V primeru, da ne naletimo na takšno večje število, sprožimo izjemo in zapišemo v kateri vrstici smo naleteli na tak primer.
Po zaključeni for zanki na konzolo izpišemo, katero datoteko oz. njene vrstice smo uspešno zapisali na novo datoteko.