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í.
Avatar
David Mrázek:8.11.2021 10:01

Ahoj, snažím se ve WPF aplikaci napsat kód který najde a přepíše text ve více domuentech s koncovkou .csproj.
Text to normálně najde a přepíše ale nyní mám roblém, že to text vypíše xkrát po sobě(zavisí na počtu nálezů).

Zkusil jsem:

private void Grid_Loaded(object sender, RoutedEventArgs e)
       {
           PoleHledani.Focus();
       }

       private void HledatButton_Click(object sender, RoutedEventArgs e)
       {
           string soubor = PoleHledani.Text;
           List<string> soubory = Directory.GetFiles(soubor, "*.csproj", SearchOption.AllDirectories).ToList();
           foreach (string cestaSoboru in soubory)
           {
               string[] radky = File.ReadAllLines(cestaSoboru);
               var novaCesta = "C:\\ArcGISPro\\bin\\";
               var cesta = @"C:\Program Files\ArcGIS\Pro\bin\";
               List<string> upraveneRadky = new List<string>();
               for (int index = 0; index < radky.Length; index++)
               {
                   string line = radky[index];
                   if (line.Contains(cesta))
                   {
                       foreach (string s in radky)
                       {

                           line = s.Replace(cesta, novaCesta);
                           upraveneRadky.Add(line);
                       }
                   }
                   File.WriteAllLines(cestaSoboru,upraveneRadky);
               }
           }
           MessageBox.Show("Hotovo!");
       }

Chci docílit: Budu rád za každou radu a pomoc.
Bojím se, že tam je nějaká uplně stupidní chyba.

Odpovědět
8.11.2021 10:01
kde je vůle, tam je cesta
Avatar
Wikan
Člen
Avatar
Odpovídá na David Mrázek
Wikan:8.11.2021 15:43

Tak když už ty řádky jednou procházíš for cyklem, tak v něm je nemusíš zase procházet foreach cyklem.
Taky tam nemusíš volat Contains a Replace, ale stačí jenom Replace.
A na List "upraveneRadky" bych se taky vykaslal a menil to primo v poli "radky".

Editováno 8.11.2021 15:44
 
Nahoru Odpovědět
8.11.2021 15:43
Avatar
Wikan
Člen
Avatar
Wikan:8.11.2021 15:51

A vůbec je to zbytečně složité, napsal bych to asi takhle:
Zbytečně složité.

var cesta = @"C:\Program Files\ArcGIS\Pro\bin\";
var novaCesta = "C:\\ArcGISPro\\bin\\";

var soubory = Directory.GetFiles(soubor, "*.csproj", SearchOption.AllDirectories);
foreach (string cestaSoboru in soubory)
{
    var text = File.ReadAllText(cestaSoboru).Replace(cesta, novaCesta);
    File.WriteAllText(cestaSoboru, text);
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
8.11.2021 15:51
Avatar
David Mrázek:9.11.2021 6:04

Děkuju a už mám i to zbytečně složité řešení :D

Nahoru Odpovědět
9.11.2021 6:04
kde je vůle, tam je cesta
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 4 zpráv z 4.