Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - metoda TRIM na soubor TXT v poli

Dobrý den!

Nejsem nijak zdatný programátor - začínám - a mám problém. Do txt souboru jsem si stahnul z internetu seznam ->

ananas
angrešt
avokádo
banán
borůvka
broskev
citron
datle
fík

atd.

Za většinou z tech slov jsou mezery.

Teď mám kód ->

 string[] ovoce = File.ReadAllLines (@"C:\Users\ ... \ovoce.txt");

                string zadani = Console.ReadLine();

                if (ovoce.Contains(zadani))
                    Console.WriteLine("Je to ovoce.");

                 else
                    Console.WriteLine("není to ovoce");

Pokud si ted vyberu nejake to ovoce ze seznamu a vypišu do konzole - vrátí mi to "není to ovoce".

Problém je samozřejme v tech mezerach za jednotlivými slovy v tom TXT souboru. (pokud je vymažu a v konzoli je napíšu - funguje to tak, jak má)

Pokud by ten soubor mel více prvků - stravil bych hodne času nad vymazaváním tech mezer - napadlo mě tedy využít na to pole metodu TRIM.

string[] ovoce = File.ReadAllLines (@"C:\Users\ ... \ovoce.txt").Trim();

zkousel jsem i

foreach (string j in ovoce)
         ovoce[j] = j.Trim();

Opravdu nevím jestli to vůbec dává smysl - každopádně to nefunguje a netuším proč.

Díky za každou radu!

P.S. - hačky a čarky jsem zatím neřešil - zkoušel jsem do konzole vypisovat jen slova bez diakritiky ...

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Nedává to smysl, vždyť to ani nemůže jít zkompilovat. Prvním pokusem voláš Trim na pole, pole (ať už…
brain_overflow 27.12.2014 23:40
brain_overflow
Jak říkám - sám tomu zcela nerozumím - učím se. Smozřejmě kód funguje. :) Děkuji mockrát! nový
matla 28.12.2014 11:26
matla
Samozrejme je dobre to mit vyresene v programu, ale pokud by se to pouzivalo casto a na velky seznam… poslední
gilhad 28.12.2014 15:33
gilhad

Nedává to smysl, vždyť to ani nemůže jít zkompilovat.
Prvním pokusem voláš Trim na pole, pole (ať už čehokoliv) nemá metodu Trim.

Ten druhej pokus je taky blbost, j je string, jeden z těch v poli, čili jeden načtený řádek.
Tím se pokoušíš indexovat v tom poli, které ho obsahuje. Pole není asociativní -> indexovat můžeš jen pozicí prvku. Ono taky indexovat prvkem, který chceš z toho pole dostat by bylo dost k ničemu, když už ho stejně máš, žejo . Když už to chceš udělat takhle, musíš použít smyčku for

for (int i = 0; i<ovoce.Length; i++)
   ovoce[i] = ovoce[i].Trim();

a pokud jde o nejjednodušší řešení, použij LINQ. K tomu už jenom dodám, že té konstrukci s šipkou "=>" se říká lambda výraz.

string[] ovoce = File.ReadAllLines(@"C:\Users\ ... \ovoce.txt").Select(s => s.Trim()).ToArray();

Samozrejme je dobre to mit vyresene v programu, ale pokud by se to pouzivalo casto a na velky seznam, tak je dobre mit navic uz i ten seznam bez mezer. Samozrejme to clovek nebude vymazavat rucne po jedne mezere (coz je navic nachylne na chyby i u relativne malych souboru s par sty polozkami), ale smaze to nejakym skriptem, napriklad:

sed -i "s/^ *//;s/ *$//" ovoce.txt

nebo pouzije nejaky rozumny editor (ja si oblibil vim), ktery umi ty mezery nahradit systematicky sam, jednim prikazem.

Zpět do poradny Odpovědět na původní otázku Nahoru