Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
python week

Diskuze: Rozdělení řetězce po 20 znacích

Aktivity
Avatar
Martin Dobrý:30.3.2020 18:58

Rosekání řetězce (vložení enteru - Environment.NewLine po např. 20 znacích).

O3SWj+BaFvkHM/DsBx5P1­PsI/7P8uTn9FjTHhhcpO6­z2iPUHeWUlRC/Sgdpqa93b­SJVyx6AyNo2tda­oigkPLrcsrm0hwEK­ph/KVBbMbTpFPJPU­MEzRP1lmqUnw6VkknbGnpa­If5m0rrqpKzQmQhdU+JPgReh­1e+9G+SpYTibNVDNer­gsMuLu9lQhk4Bkgk­DiHt9WoKs3apvHhmdhRZI­a/I4gD7+v3j2BYR­KxIzTLPeGP4DoP0fO­aHC+pgEmX2X7IL­HQVJ60SA4NSrcU­o/Xw/ia9YTvTLHL+qpYF­XpdfUe2o+5puk5u­oH3gJnpIj3tTmyz­bAYOu2sk9PGnU7e­Ro2pXw==

Zkusil jsem: Vyhledat řešení na internetu.

Chci docílit: Vykresnení řetězce takto:

O3SWj+BaFvkHM/DsBx5P1­PsI/7P8uTn
9FjTHhhcpO6z2­iPUHeWUlRC/Sgdpqa9
3bSJVyx6AyNo2tda­oigkPLrcsrm0hwEK
ph/KVBbMbTpFP­JPUMEzRP1lmqUn­w6
VkknbGnpaIf5m0rrqpKzQ­mQhdU+JPgR
eh1e+9G+SpYTib­NVDNergsMuLu9lQhk
4BkgkDiHt9WoK­s3apvHhmdhRZI­a/I4gD
7+v3j2BYRKxIz­TLPeGP4DoP0fO­aHC+p
gEmX2X7ILHQVJ60SA4NSr­cUo/Xw/ia9Y
TvTLHL+qpYFXpdfU­e2o+5puk5uoH3gJn
pIj3tTmyzbAYOu­2sk9PGnU7eRo2pXw==

 
Odpovědět
30.3.2020 18:58
Avatar
Martin Dobrý:30.3.2020 19:04

Napadlo mě pouze nic moc řešení a to spočítat znaky a foreach je postupně vypisovat a vždy po 20 znaku vložit Environment.New­Line. Přijde mi to, ale jako čunárna.... :-)

Editováno 30.3.2020 19:04
 
Nahoru Odpovědět
30.3.2020 19:04
Avatar
Bugmaster
Člen
Avatar
Odpovídá na Martin Dobrý
Bugmaster:30.3.2020 20:07

Tohle jde udělat asi milionem způsobů. To, co jsi navrhnul, je v principu funkční - a jsem přesvědčen, že pro drtivou většinu použití do bude naprosto vyhovovat.

Kdybych to psal já, tak to udělám nějak takhle:

private static string Rozdelit(string s, int maxLength, string separator) =>
  string.Join(separator, Rozdelit(s, maxLength));

private static System.Collections.Generic.IEnumerable<string> Rozdelit(string s, int maxLength)
{
  if (s is null)
    throw new ArgumentNullException(nameof(s));
  int start = 0;
  do
  {
    var len = Math.Min(s.Length - start, maxLength);
    yield return s.Substring(start, len);
    start += maxLength;
  } while (start < s.Length);
}

Nevím, jestli je to rychlejší, než vyzobávání po charech. Pravdepodobně nikoliv. Hádám ale, že na tom nesejde.

 
Nahoru Odpovědět
30.3.2020 20:07
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jakub Verner
Člen IT Redactor Gang
Avatar
Jakub Verner:31.3.2020 13:55

Ahoj, jestli jsem to správně pochopil,použil bych toto:

public static void Rozdelit(string text)
{
    int cnt = 0;

    foreach (char chr in text)
    {
        cnt++;

        Console.Write(chr);

        if (cnt == 20)
        {
            Console.WriteLine();
            cnt = 0;
        }
    }
}
 
Nahoru Odpovědět
31.3.2020 13:55
Avatar
Odpovídá na Martin Dobrý
Michael Škrášek:31.3.2020 16:00

další možností (a asi nejlepší pro práci s textem) je použít regulární výraz:

string output = Regex.Replace(input, @"(?<=\G.{20})", Environment.NewLine);

je potřeba přidat:

using System.Text.RegularExpressions;
Nahoru Odpovědět
31.3.2020 16:00
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Odpovídá na Michael Škrášek
Martin Dobrý:31.3.2020 16:36

Presně takové elegantní řešení jsem hledal. Moc děkuji.

 
Nahoru Odpovědět
31.3.2020 16:36
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 6 zpráv z 6.