Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací

Diskuze: Pomoc s kódem...

C# .NET .NET (C# a Visual Basic) Pomoc s kódem... American English version English version

Aktivity (3)
Avatar
Vítězslav Skopal:21. října 22:22

Ahoj všem... Pomohl by mi někdo se snadnějším psaním kódu ve visual basic?
Píšu kód který má měnit text v textboxu podle kriterií. Nechce se mě psát neustále Textbox1.Text­.Replace("11", "2") protože 1+1=2 jako další pravidlo je Textbox1.Text­.Replace("12", "3") protože 1+2=3 dál to pokračuje ve stejném znění...
Chtěl bych to až do 8 místného čísla a je blbost psát každou variantu zvlášť. Neví někdo jak to napsat jednodužšeji?

Zkusil jsem:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        With TextBox1
            .Text = .Text.Replace("a", "1")
            .Text = .Text.Replace("b", "2")
            .Text = .Text.Replace("c", "3")
            .Text = .Text.Replace("d", "4")
            .Text = .Text.Replace("e", "5")
            .Text = .Text.Replace("f", "6")
            .Text = .Text.Replace("g", "7")
            .Text = .Text.Replace("h", "8")
            .Text = .Text.Replace("i", "9")
            .Text = .Text.Replace("j", "1")
            .Text = .Text.Replace("k", "2")
            .Text = .Text.Replace("l", "3")
            .Text = .Text.Replace("m", "4")
            .Text = .Text.Replace("n", "5")
            .Text = .Text.Replace("o", "6")
            .Text = .Text.Replace("p", "7")
            .Text = .Text.Replace("q", "8")
            .Text = .Text.Replace("r", "9")
            .Text = .Text.Replace("s", "1")
            .Text = .Text.Replace("t", "2")
            .Text = .Text.Replace("u", "3")
            .Text = .Text.Replace("v", "4")
            .Text = .Text.Replace("w", "5")
            .Text = .Text.Replace("x", "6")
            .Text = .Text.Replace("y", "7")
            .Text = .Text.Replace("z", "8")
            .Text = .Text.Replace(" ", " - ")
            .Text = .Text.Replace("11", "2")
            .Text = .Text.Replace("12", "3")
            .Text = .Text.Replace("13", "4")
            .Text = .Text.Replace("14", "5")
            .Text = .Text.Replace("15", "6")
            .Text = .Text.Replace("16", "7")
            .Text = .Text.Replace("17", "8")
            .Text = .Text.Replace("18", "9")
            .Text = .Text.Replace("19", "1")
            .Text = .Text.Replace("20", "2")
            .Text = .Text.Replace("21", "3")
            .Text = .Text.Replace("22", "4")
            .Text = .Text.Replace("23", "5")
            .Text = .Text.Replace("24", "6")
            .Text = .Text.Replace("25", "7")
            .Text = .Text.Replace("26", "8")
            .Text = .Text.Replace("27", "9")
        End With
End Sub

Chci docílit: Jednodužšího kód.

 
Odpovědět 21. října 22:22
Avatar
Ondřej Šrytr:21. října 23:14

Ahoj,

ty čísla jsou nějak oddělená mezerou nebo čárkou?

Jako řešení bych to viděl tak, že bych si vyhledal číslo v textovém poli a pomocí tohoto kódu provedl ciferný součet. Proměnná "s" představuje nalezené číslo.

Dim s As String = "11"
Dim soucet As Integer = 0

For Each c As Char In s
        soucet += Integer.Parse(c)
Next

TextBox1.Text = TextBox1.Text.Replace(s, soucet)
 
Nahoru Odpovědět 21. října 23:14
Avatar
Odpovídá na Vítězslav Skopal
Jan Procházka:22. října 11:36

Co se týče ciferných součtů, tak Ondřej už odpověděl :)

Co se týče písmen, tak Ti stačí daný znak přetypovat z char do int což Ti vrátí polohu (adresu) daného znaku v ASCII tabulce.

Dalším krokem je odečíst vhodné číslo tak, abys pro a dostal 0, b 1 atd.

Pak už jen spočítat modulo, tedy zbytek po dělení, devíti a k výsledku přičíst jedničku.

Tím jsi dostal první polovinu "tabulky" do jedné funkce.

 
Nahoru Odpovědět 22. října 11:36
Avatar
Vítězslav Skopal:22. října 11:45

Díky za reakce, nula nepřichází v úvahu. Je to aplikace na jednoduché dekódování textu kde a=1 b=2 c=3 atd...
Dále když je to celá věta s dlouhým textem tak to znamená že čísla se sečtou tak dokud nezůstane jen jednociferné číslo jako příklad text aabcd = 11234 = 1+1+2+3+4= 11 = 1+1 = 2 ... "2" Je výsledné číslo slova. Jako řešení bych nejspíše viděl odpověď Ondřeje.

 
Nahoru Odpovědět 22. října 11:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23. října 10:57

A pro "aj" to bude 1+10 nebo 1+1+0 a nebo, jak mas tu puvodni tabulku 1+1?
Jestli to puvodni, tak bych pouzil podobny kod jako psal ondrej. Pseudokod nejak takto:

cyklus (vsechny znaky)
{
if (code>=65 && code<75) zapis(code - 64); // 65 ascii kod znaku pro 'A' http://www.asciitable.com/
if (code>=75 && code<85) zapis(code - 64 - 10); ...
}
soucet = 0;
cyklus (vsechny znaky)
{
if (code>=48 && code<=57) {soucet += code - 47;}
 else {zapis(soucet) + znak; soucet = 0;}
}
if (soucet>0) zapis(soucet);
Editováno 23. října 10:59
 
Nahoru Odpovědět 23. října 10:57
Avatar
Odpovídá na Peter Mlich
Vítězslav Skopal:24. října 9:56

Pro "aj" je to 1+1 tudíž 2...

 
Nahoru Odpovědět 24. října 9:56
Avatar
Odpovídá na Vítězslav Skopal
Jan Procházka:30. října 9:52

Jestli s tou nulou narážíš na můj příspěvek, tak nehrozí, že by ta nula byla vrácená. Modulo vrací zbytek po celočíselném dělení, pro X modulo 9 to vrátí číslo od nuly do osmi. V dalším kroku je přičtení jedničky, takže výsledek je v rozsahu od jedné do devíti.

Celou větu můžeš jednoduše zpracovat rekurzivní funkcí.

Private Sub String zvejkej (String StaryRetezec)
// kod pro prevod StaryRetezec na NovyRetezec
if (NovyRetezec.length>1)
        NovyRetezec=zvejkej(NovyRetezec);
return NovyRetezec;
 
Nahoru Odpovědět 30. října 9:52
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 7 zpráv z 7.