IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Najdi nahrad v list<string>

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Poggy
Člen
Avatar
Poggy:9.2.2017 18:37

Ahoj, mám menší problém s jednoduchou úlohou. Chci načíst libovolný txt soubor do list<string>. Poté tento list<> projít a najít v něm hledaný textový řetězec od uživatele a tento řetězec nahradit za jiný řetězec co zadal uživatel. Celý výsledek chci poté zapsat do nového txt souboru. Poradíte co mám v kódu blbě? Chyba bude v této části:

foreach (string retezec in data)
            {
                if (retezec == najdi)
                    retezec.Replace(retezec, nahrad);
                vysledny.WriteLine(retezec);
            }

Kompletný zdroják je zde: http://www.itnetwork.cz/dev-lighter/883

Děkuji za rady.

 
Odpovědět
9.2.2017 18:37
Avatar
Odpovídá na Poggy
Neaktivní uživatel:9.2.2017 18:56
retezec.Replace(retezec, nahrad);

-> tento kód nemodifikuje původní string (retezec), ale vytvoří nový, modifikovaný, a ten vratí
(což platí pro všechny metody třídy String - tato třída je tzv. immutable - více třeba na Wikipedii)

foreach (string retezec in data)
            {
                if (retezec == najdi)
                   string temp = retezec.Replace(retezec , nahrad);
                vysledny.WriteLine(temp);
            }
Editováno 9.2.2017 18:57
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
9.2.2017 18:56
Neaktivní uživatelský účet
Avatar
Poggy
Člen
Avatar
Odpovídá na Neaktivní uživatel
Poggy:9.2.2017 19:19

Děkuji mockrát. Již funguje. Ještě jsem přemýšlel nad variantou, že by řetezec pouze obsahoval zadanou část. Jak bych nahradil tuto část a zároveň zachoval původní a zároveň neznal délku ani jednoho z řetězců. Např. Najdi jmeno01 a zaměň za jmeno11. prostě libovolný počet znaků v libovolné délce řetezce.

Zkusil jsem dle tvého návodu to malinko upravit, ale nahradí mi to celý řádek. Což jsem čekal.

foreach (string retezec in data)
            {
                if (retezec.Contains(najdi))
                {
                    string temp = retezec.Replace(retezec, nahrad);
                    vysledny.WriteLine(temp);
                }
                else
                    vysledny.WriteLine(retezec);
 
Nahoru Odpovědět
9.2.2017 19:19
Avatar
Odpovídá na Poggy
Neaktivní uživatel:9.2.2017 20:55
retezec.Replace(najdi, nahrad);

Stačí jen mrknout na dokumentaci - Replace nahradí všechny výskyty stringu "najdi" za string "nahrad".

Nahoru Odpovědět
9.2.2017 20:55
Neaktivní uživatelský účet
Avatar
Poggy
Člen
Avatar
Odpovídá na Neaktivní uživatel
Poggy:11.2.2017 14:40

Děkuji, jsem blbý. Bohužel se jako samouk nemám kde zeptat.

private void btnnahradcastradku_Click(object sender, EventArgs e)
       {
           string jmenosouboru = txtsoubor.Text;
           string najdicast = txtnajdicastradku.Text;
           string nahradcast = txtnahradcastradku.Text;
           try
           {
               StreamWriter soubor = new StreamWriter(jmenosouboru, false, Encoding.Default);
               foreach (string radek in data)
               {
                   if (radek.Contains(najdicast))
                   {
                       string temp = radek.Replace(najdicast, nahradcast);
                       soubor.WriteLine(temp);
                   }
                   else
                       soubor.WriteLine(radek);
               }
               soubor.Close();
               MessageBox.Show("Hotovo.");
           }
           catch (Exception)
           {
               MessageBox.Show("Zadaná část textu se v souboru nevyskytuje.");
               return;
           }
 
Nahoru Odpovědět
11.2.2017 14:40
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.