Jde to i obráceně ? – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Jde to i obráceně ? – Visual Basic – Fórum – Programujte.comJde to i obráceně ? – Visual Basic – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
gastonx
~ Anonymní uživatel
11 příspěvků
8. 4. 2014   #1
-
0
-

Dobrý den potřeboval bych ještě pomoci. Kód mi pracuje tak že překládá .. ale jen na jednu stranu.. šlo by jakýmkoli způsobem udělat aby to překládalo i obráceně ? Klidně v jiném formu.. :) Děkuji za rady.  

Public Class Form1


    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        Dim i As Integer
        Dim Code As String

        TextBox2.Text = ""

        For i = 1 To Len(TextBox1.Text)

            Code = ""
            If Mid$(TextBox1.Text, i, 1) = "a" Then Code = ".-"
            If Mid$(TextBox1.Text, i, 1) = "á" Then Code = ".-"
            If Mid$(TextBox1.Text, i, 1) = "b" Then Code = "-..."
            If Mid$(TextBox1.Text, i, 1) = "c" Then Code = "-.-."
            If Mid$(TextBox1.Text, i, 1) = "č" Then Code = "-.-."
            If Mid$(TextBox1.Text, i, 1) = "d" Then Code = "-.."
            If Mid$(TextBox1.Text, i, 1) = "ď" Then Code = "-.."
            If Mid$(TextBox1.Text, i, 1) = "é" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "e" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "ě" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "f" Then Code = "..-."
            If Mid$(TextBox1.Text, i, 1) = "g" Then Code = "--."
            If Mid$(TextBox1.Text, i, 1) = "h" Then Code = "...."
            If Mid$(TextBox1.Text, i, 1) = "ch" Then Code = "----"
            If Mid$(TextBox1.Text, i, 1) = "i" Then Code = ".."
            If Mid$(TextBox1.Text, i, 1) = "í" Then Code = ".."
            If Mid$(TextBox1.Text, i, 1) = "j" Then Code = ".---"
            If Mid$(TextBox1.Text, i, 1) = "k" Then Code = "-.-"
            If Mid$(TextBox1.Text, i, 1) = "l" Then Code = ".-.."
            If Mid$(TextBox1.Text, i, 1) = "m" Then Code = "--"
            If Mid$(TextBox1.Text, i, 1) = "n" Then Code = "-."
            If Mid$(TextBox1.Text, i, 1) = "ň" Then Code = "-."
            If Mid$(TextBox1.Text, i, 1) = "o" Then Code = "---"
            If Mid$(TextBox1.Text, i, 1) = "ó" Then Code = "---"
            If Mid$(TextBox1.Text, i, 1) = "p" Then Code = ".--."
            If Mid$(TextBox1.Text, i, 1) = "q" Then Code = "--.-"
            If Mid$(TextBox1.Text, i, 1) = "r" Then Code = ".-."
            If Mid$(TextBox1.Text, i, 1) = "ř" Then Code = ".-."
            If Mid$(TextBox1.Text, i, 1) = "s" Then Code = "..."
            If Mid$(TextBox1.Text, i, 1) = "š" Then Code = "..."
            If Mid$(TextBox1.Text, i, 1) = "t" Then Code = "-"
            If Mid$(TextBox1.Text, i, 1) = "ť" Then Code = "-"
            If Mid$(TextBox1.Text, i, 1) = "u" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "ú" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "ů" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "v" Then Code = "...-"
            If Mid$(TextBox1.Text, i, 1) = "w" Then Code = ".--"
            If Mid$(TextBox1.Text, i, 1) = "x" Then Code = "-..-"
            If Mid$(TextBox1.Text, i, 1) = "y" Then Code = "-.--"
            If Mid$(TextBox1.Text, i, 1) = "ý" Then Code = "-.--"
            If Mid$(TextBox1.Text, i, 1) = "z" Then Code = "--.."
            If Mid$(TextBox1.Text, i, 1) = "ž" Then Code = "--.." 'Konec (malá písmena)
            If Mid$(TextBox1.Text, i, 1) = "A" Then Code = ".-"
            If Mid$(TextBox1.Text, i, 1) = "Á" Then Code = ".-"
            If Mid$(TextBox1.Text, i, 1) = "B" Then Code = "-..."
            If Mid$(TextBox1.Text, i, 1) = "C" Then Code = "-.-."
            If Mid$(TextBox1.Text, i, 1) = "Č" Then Code = "-.-."
            If Mid$(TextBox1.Text, i, 1) = "D" Then Code = "-.."
            If Mid$(TextBox1.Text, i, 1) = "Ď" Then Code = "-.."
            If Mid$(TextBox1.Text, i, 1) = "E" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "É" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "Ě" Then Code = "."
            If Mid$(TextBox1.Text, i, 1) = "F" Then Code = "..-."
            If Mid$(TextBox1.Text, i, 1) = "G" Then Code = "--."
            If Mid$(TextBox1.Text, i, 1) = "H" Then Code = "...."
            If Mid$(TextBox1.Text, i, 1) = "CH" Then Code = "----"
            If Mid$(TextBox1.Text, i, 1) = "I" Then Code = ".."
            If Mid$(TextBox1.Text, i, 1) = "Í" Then Code = ".."
            If Mid$(TextBox1.Text, i, 1) = "J" Then Code = ".---"
            If Mid$(TextBox1.Text, i, 1) = "K" Then Code = "-.-"
            If Mid$(TextBox1.Text, i, 1) = "L" Then Code = ".-.."
            If Mid$(TextBox1.Text, i, 1) = "M" Then Code = "--"
            If Mid$(TextBox1.Text, i, 1) = "N" Then Code = "-."
            If Mid$(TextBox1.Text, i, 1) = "Ň" Then Code = "-."
            If Mid$(TextBox1.Text, i, 1) = "O" Then Code = "---"
            If Mid$(TextBox1.Text, i, 1) = "Ó" Then Code = "---"
            If Mid$(TextBox1.Text, i, 1) = "P" Then Code = ".--."
            If Mid$(TextBox1.Text, i, 1) = "Q" Then Code = "--.-"
            If Mid$(TextBox1.Text, i, 1) = "R" Then Code = ".-."
            If Mid$(TextBox1.Text, i, 1) = "Ř" Then Code = ".-."
            If Mid$(TextBox1.Text, i, 1) = "S" Then Code = "..."
            If Mid$(TextBox1.Text, i, 1) = "Š" Then Code = "..."
            If Mid$(TextBox1.Text, i, 1) = "T" Then Code = "-"
            If Mid$(TextBox1.Text, i, 1) = "Ť" Then Code = "-"
            If Mid$(TextBox1.Text, i, 1) = "U" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "Ú" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "Ů" Then Code = "..-"
            If Mid$(TextBox1.Text, i, 1) = "V" Then Code = "...-"
            If Mid$(TextBox1.Text, i, 1) = "W" Then Code = ".--"
            If Mid$(TextBox1.Text, i, 1) = "X" Then Code = "-..-"
            If Mid$(TextBox1.Text, i, 1) = "Y" Then Code = "-.--"
            If Mid$(TextBox1.Text, i, 1) = "Ý" Then Code = "-.--"
            If Mid$(TextBox1.Text, i, 1) = "Z" Then Code = "--.."
            If Mid$(TextBox1.Text, i, 1) = "Ž" Then Code = "--.." 'konec (velká písmena)
            If Mid$(TextBox1.Text, i, 1) = " " Then Code = "|" 'mezera mezi slovy
            '...
            If Code <> "" Then
                TextBox2.Text = TextBox2.Text & Code
                If i < Len(TextBox1.Text) And Code <> "|" Then
                    TextBox2.Text = TextBox2.Text & "|"
                End If
            End If

        Next i

    End Sub


End Class
Nahlásit jako SPAM
IP: 88.102.250.–
Reklama
Reklama
pee-jay_cz0
Návštěvník
8. 4. 2014   #2
-
0
-

Ahoj. Chybí ti tam ještě interpunkce (. , ; ! ?) aby to bylo kompletní. :)

Pro reverzní překlad můžeš použít metodu Split, která rozdělí souvislý text na jednotlivá "písmena".

Nahlásit jako SPAM
IP: 213.129.136.–
Kowalsky950
Stálý člen
8. 4. 2014   #3
-
0
-

#1 gastonx
Nebylo by jednoduší ulož ty písmenka do pole? A jako klíč použít třeba tu morzeovku? Tedy 2D pole? Nemusíš tam mít vypsané všechny ty podmínky (kromě toho, že to nevypadá hezky esteticky, neorientuje se v tom, to nemáš udělané ani jako if/elseif/else ale jako if...takže každá další podmínka máš další skok [vím že ve VB se to asi neřeší, ale přeci jen člověk by měl stále hledět na výklon :) ])
Takže bych si udělal slovník nebo jednoduše pole a překopíroval bych hodnoty do něj => poté bych jej jen procházel v cyklu, a zpáteční převod máš vlastně už hotový ;-) Jen otočíš strany ;-)

Nahlásit jako SPAM
IP: 90.176.114.–
pee-jay_cz0
Návštěvník
8. 4. 2014   #4
-
0
-

   

' Ještě jeden textbox a zase: Text3.MultiLine = True
' aby se text automaticky zalamoval.
' A taky přidej tlačítko - pro převod morseovky z Text2 do Text3.

Private Sub Command1_Click()
   
    Dim i As Integer        'Čítač cyklů
    Dim Src As String       'Zdroj
    Dim Trgt As String      'Cíl
    Dim Splt() As String    'Pole morseových písmen
    Dim Char As String      'ANSI znak
    
    Src = Replace(Text2.Text, "||", "| |") 'Musíš tam vrátit znak mezery
    Splt = Split(Src, "|")                 'Rozdělit text do řádkù
    
    For i = LBound(Splt) To UBound(Splt)        'Prohledat celé vzniklé pole
        Char = ""
        If Splt(i) = " " Then Char = " "
        If Splt(i) = ".-" Then Char = "a"
        If Splt(i) = "-..." Then Char = "b"
        If Splt(i) = "-.-." Then Char = "c"
        If Char <> "" Then
            Trgt = Trgt & Char
        End If
    Next i

    Text3.Text = Trgt

End Sub


It works for me...

Nahlásit jako SPAM
IP: 213.129.136.–
pee-jay_cz0
Návštěvník
8. 4. 2014   #5
-
0
-

A na výkon se vykašli. Takhle jednoduchej program může běžet milionkrát pomaleji, a pořád to bude rychlý dost. Nekóduješ přece UHD video v reálným čase...

Nahlásit jako SPAM
IP: 213.129.136.–
pee-jay_cz0
Návštěvník
8. 4. 2014   #6
-
0
-

A ještě mě napadlo, že asi budeš muset změnit Char na něce jiného, protože ve VB NET je to slovo rezervovaný pro metodu Char.

Nahlásit jako SPAM
IP: 213.129.136.–
gastonx
~ Anonymní uživatel
11 příspěvků
8. 4. 2014   #7
-
0
-

Všem vám moc děkuju. :) Ste dobří rádci. :) Zítra vyzkoušim pee_jay_cz vaši metodu. :) Ješte jednou děkuji. :)

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 95.143.134.–
p3can
~ Anonymní uživatel
312 příspěvků
8. 4. 2014   #8
-
0
-

hej sry kamo ale ten kod je masakr. kdybys tam pouzil ten dictionary co sem ti posilal v puvodnim prispevku nebo sis udelal neco jako class CodePair { string NormalCode; string MorseCode } a od toho pole a pres to to resil. vzdyt ten VB je prece objektovy jazyk.

Nahlásit jako SPAM
IP: 77.92.213.–
gastonx
~ Anonymní uživatel
11 příspěvků
9. 4. 2014   #9
-
0
-

Já bych to rád udělal lépe. :( Boužel si s tím nevím rady jak se co pořádně dělá. :(

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 95.143.134.–
gastonx
~ Anonymní uživatel
11 příspěvků
9. 4. 2014   #10
-
0
-

#4 pee-jay_cz
Mě ten kód tedy nejde rozchodi. -_- Asi  jsem natvrdlý ale hlásí mi to 16 chyb..  

If Splt(i) = " " Then Char = " " Tady jsou hned 2 problémy - Char' is a type and cannot be used as an expression.  A to znaménko = je prý také špatně.. :( Nevím co s tím..

Nahlásit jako SPAM
IP: 88.102.250.–
pee-jay_cz0
Návštěvník
9. 4. 2014   #11
-
+1
-
Zajímavé

Změň Char na Code a chyby zmizí. Když to šlape v předešlé proceduře...

Ale změň to všude. Podbarvi celou proceduru a změň to v editoru přes [Edit / Replace] jednorázově.

Nahlásit jako SPAM
IP: 213.129.136.–
gastonx0
Duch
9. 4. 2014   #12
-
0
-

#11 pee-jay_cz
To se povedlo nádherně.. :) Zmizelo asi 13 z 16 chyb.. další 2 byly přepsat na textbox... a teď tam je poslední chyba s tím       Trgt = Trgt & Code     Tam to zase hlásí "Warning 1 Variable 'Trgt' is used before it has been assigned a value. A null reference exception could result at runtime."  

Nahlásit jako SPAM
IP: 88.102.250.–
pee-jay_cz0
Návštěvník
9. 4. 2014   #13
-
+1
-
Zajímavé

OK. Tak tam přídej ještě jeden řádek. Trgt = ""

Hádám, že by to mělo stačit.

    Src = Replace(Text2.Text, "||", "| |") 'Musíš tam vrátit znak mezery
    Splt = Split(Src, "|")                 'Rozdělit text do řádkù
    Trgt = ""				   'Iniciace proměnné
    
    For i = LBound(Splt) To UBound(Splt)        'Prohledat celé vzniklé pole

Ono je důležitý, aby Trgt bylo prázdný v případě, kdy není co překládat.

Tím se Text3.Text prostě jen vymaže, pokud v něm předtím něco bylo.

Nahlásit jako SPAM
IP: 213.129.136.–
gastonx0
Duch
9. 4. 2014   #14
-
0
-

#13 pee-jay_cz
Krása... Teď vlastně stačí tyto 2 kódy spojit do hromady. aby fundgovalo jak překládání na morseovku tak překládání z ní ? Bude to něak dohromady fungovat ? :)

Nahlásit jako SPAM
IP: 88.102.250.–
pee-jay_cz0
Návštěvník
9. 4. 2014   #15
-
+1
-
Zajímavé

#14 gastonx

Jo. Jestlis to udělal, jak jsem ti psal, tak se automaticky překládá z češtiny do Morseovky Text1 => Text2 a po stisknutí tlačítka Command1 se přeloží Morseovka do "cestiny" Text2 => Text3. Můžeš tak testovat, jestli překlad funguje. V Textu3 by měl být stejný obsah jako v Textu1, krom čárek a háčků

Nahlásit jako SPAM
IP: 213.129.136.–
gastonx0
Duch
9. 4. 2014   #16
-
0
-

Jojo. Funguje to přesně.. :) Malá a velká písmena v text3 neřeším.. Nejde ještě něak nastavit aby to s písmenama bralo i čísla a Otazník ...... ? :) Něco jiného než jen Integer nebo String ? :)

Nahlásit jako SPAM
IP: 88.102.250.–
pee-jay_cz0
Návštěvník
9. 4. 2014   #17
-
0
-

#16 gastonx

Jenom Integer nebo String? Proměnná v textboxu je String. "Hodnota" každého písmene je buď Byte (0 až 255), nebo Integer (0 až 65536). Jde o interpretaci, ANSI versus Unikód. O jaké písmeno jde můžeš testovat různě.

If písmeno = "a" Then...

If Asc(písmeno) = 97 Then... 

If AscW(písmeno) = 97 Then... 'W znamená Wide, a to je termín Microsoftu pro Unikód.

Ale to je zbytečně komplikovaný. Podstatný je, že veškerý znaky, pro který existuje kód v morseovce, můžeš zadat tímhle stejným způsobem jako doteď, aspoň si to myslím. A program ti přeloží všechno, co ho překládat naučíš, vyjma znaku "|", který zrovna funguje jako oddělovač písmen.

Čísla a interpunkce jsou zde: http://cs.wikipedia.org/wiki/Morseova_abeceda

Nahlásit jako SPAM
IP: 213.129.136.–
pee-jay_cz0
Návštěvník
9. 4. 2014   #18
-
0
-

I když Integer vlastně není dvojbajt, to by byl spíš Word nebo tak něco.

VB6 unsigned double byte nezná. Integer může mít hodnotu {-32768, 32767}. Detail. :)

Nahlásit jako SPAM
IP: 213.129.136.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Jméno obráceně. — založil DeathHumanCZ

číslo obráceně — založil Lukas

Jde použít s DB? — založil medok

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý