[ cvolka11 @ 28.11.2007. 18:42 ] @
Kako da pročitam reči odvojene blanko karakterom iz tekstualnog fajla u C#?

Hvala
[ android~paranoid @ 28.11.2007. 21:39 ] @
Code:

            StreamReader objReader = new StreamReader("nesto.txt");
            string str = objReader.ReadToEnd();
            objReader.Close();

            List<string> stringovi = new List<string>();

            foreach (string subString in str.Split(' '))
           {
                    stringovi.Add (subString);
           }
[ Shadowed @ 28.11.2007. 23:59 ] @
Nisam siguran pa taman i da se proverim, da li bi se str.Split(' ') izvrsilo samo jednom (kao sto bi bilo ovde potrebno)?
Tj. kako foreach interno radi?
[ aleksandarpopov @ 29.11.2007. 09:40 ] @
Da, pozvace se samo jednom i vratice niz stringova (ako ih ima)... uostalom imas ovde http://msdn2.microsoft.com/en-us/library/aa288257(VS.71).aspx
Pozdrav.
[ cvolka11 @ 29.11.2007. 15:07 ] @
Kapiram,hvala puno.

Jos jedno pitanje, kako bih mogao sada te reci da upisujem u novi fajl ali da budu sortirane,svaka rec u novom redu.

Hvala
[ jablan @ 29.11.2007. 15:21 ] @
Zašto mi ovo liči na domaći/seminarski zadatak?

Šta ti konkretno ne ide, napiši kako si probao pa neće.
[ aleksandarpopov @ 29.11.2007. 15:23 ] @
Sa StreamWritter (http://msdn2.microsoft.com/en-us/library/aa735748(VS.71).aspx) i WriteLine - za svaki elemenat u onoj listi iz primera sto ti je android~paranoid dao.
[ negyxo @ 29.11.2007. 18:06 ] @
Citat:
Shadowed: Nisam siguran pa taman i da se proverim, da li bi se str.Split(' ') izvrsilo samo jednom (kao sto bi bilo ovde potrebno)?
Tj. kako foreach interno radi?


foreach je jezikca konstrukcija, tj. kompajler u pozadini uradi implementaciju while petlje. U zavisnosti da li objekat implementira IDisposable ovo varira:
Code:

Enumerator enumerator = (collection).GetEnumerator();
try {
    while (enumerator.MoveNext()) {
        ElementType element = (ElementType)enumerator.Current;
        statement;
    }
}
finally {
    IDisposable disposable = enumerator as System.IDisposable;
    if (disposable != null) disposable.Dispose();
}


Zanimljivo da Reflecotor prikazuje foreach petlju a ne ovakvu while konstrukciju, sto ce reci, izgleda da cita odredjeni blok IL kodova kako bi zakljucio da je u pitanju foreach petlja. Ono sto je jos zanimljivo je, sto sve nizove ([]) foreach drukcije konstruise u odnosu na klase koje implementiraju IEnumerable. Ukoliko klasa implementira IEnumerable onda se poziva citava ova konstrukcija, dok ako je u pitanju niz, onda se radi prosto uporedjivanje duzine niza sa trenutnom pozicijom u while petlji. Drugim recima, brze radi foreach sa [] nego sa klasama koje implementiraju IEnumerable i to skoro 2x.
Da, zaboravih, sporije je ako se radi samo uporedjivanje foreach bez ikakvog dodatnog overhead-a, sto u praksi niko ne koristi, dok ako postoji i obicno sabranje dve promenljive u foreach, onda ta razlika bledi sa povecanjem kompleksnosti operacije, drugim recima, skoro da je nebitno.

@cvolka11
Imas System.IO.File.ReadAllText method, posto vidim da citas odjednom ceo fajl.
[ android~paranoid @ 29.11.2007. 18:09 ] @
Citat:
cvolka11: Kapiram,hvala puno.

Jos jedno pitanje, kako bih mogao sada te reci da upisujem u novi fajl ali da budu sortirane,svaka rec u novom redu.

Hvala


Code:

           stringovi.Sort();

           StreamWriter objWriter = new StreamWriter("nestoDrugo.txt");

           for (int i = 0; i < stringovi.Count; i++)
           {

               objWriter.WriteLine(stringovi[i]);
           }
           objWriter.Close();
[ Shadowed @ 29.11.2007. 19:11 ] @
@negyxo, hvala na odgovoru. Ono zbog cega sam pitao je to sto se sama kolekcija (niz u ovom slucaju) dobija u samoj foreach petlji pa ne znam da li kompajler nju uzme u neku promenljivu i onda nju koristi ili poziva svaki put? Pretpostavljam da je ovo prvo, ali sam par puta imao nedoumicu sta ce se desavati pa zato pitam (interesuje me i za javu isto, iako nije bas tema ovog foruma).
[ negyxo @ 29.11.2007. 20:25 ] @
Citat:
Shadowed: Ono zbog cega sam pitao je to sto se sama kolekcija (niz u ovom slucaju) dobija u samoj foreach petlji pa ne znam da li kompajler nju uzme u neku promenljivu i onda nju koristi ili poziva svaki put? Pretpostavljam da je ovo prvo, ali sam par puta imao nedoumicu sta ce se desavati pa zato pitam (interesuje me i za javu isto, iako nije bas tema ovog foruma).


E sad, da li ovo konstatujes sta ti nije bilo jasno ili je pitanje? Ukoliko je pitanje onda iz prethodnog odgovora mozes videti da se GetEnumerator() poziva pre while petlje, sto znaci, da se ne poziva na svakoj iteraciji jer bi to bilo suludo. Verovatno i sam znas da svaki poziv f-je zahteva par operacija sa registrima i stekom, sto je bespotrebni overhead.
Sad, sto se tice jave, to vec ne znam, ali pretpostavljam da je resenje veoma slicno.
[ Shadowed @ 29.11.2007. 21:06 ] @
OK, da, u pravu si, nisam lepo obratio paznju, kada uzme jednom enumerator, posle uvek radi sa istom kolekcijom (od koje je i uzet), i da, isto je i u javi. Hvala!