Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Kirjaimet merkeiksi tai luvuiksi

Zero88 [13.06.2004 22:14:20]

#

Mulla on formilla kaksi tekstikenttää. Toiseen pitäis laittaa tekstiä ja sit painaa commandbuttonii niin se muuttais sen tekstin numeroiks ja merkeiks esim. o=1 p=6 jne...Vähän ehkä selitetty epäselvästi...

Antti Laaksonen [13.06.2004 22:23:29]

#

Muuntoperiaatetta voisit vielä selventää, mutta joka tapauksessa merkin korvaaminen toisella tapahtuu Replace-funktiolla.

tsuriga [13.06.2004 22:24:28]

#

Se on hyvä, että ite jaksat näitä paljon miettiä. Kato vaikka VBasic opasta osa 4 esimerkkiprojekti 1:stä. Numerot merkeiksi ja toisinpäin onnaa vaikka taulukoilla taulu1 ja taulu2, joissa toisessa on kirjaimet ja toisessa vastaavat numerot.

EDIT: Tai sit kuten yllä.

hunajavohveli [14.06.2004 09:59:45]

#

Replace-funktio lienee tässä kätevämpi, koska VAL muuttaisi numeroiksi vain merkkijonon, joka sisältää numeroita.
Joten vaikka VAL("op") palauttaisi nollan.

Antti [14.06.2004 12:02:35]

#

Voithan tietysti käyttää kirjainten ascii koodeja:

Eli tyyliin:

Private Sub Command1_Click()
    Dim iCnt As Integer
    Text2.Text = ""
    For iCnt = 1 To Len(Text1.Text)
        Text2.Text = Text2.Text & Asc(Mid(Text1.Text, iCnt, 1))
    Next
End Sub

hunajavohveli [14.06.2004 13:59:22]

#

Ilmeisesti on kuitenkin kyse siitä, että Zero88 haluaa itse määrittää, mikä kirjain muutetaan miksikin numeroksi.

Antti [14.06.2004 15:48:55]

#

No sen saa tapahtumaan esim kahdella muuttujalla:

Function TransferCharacters(ByVal strText As String) As String
    Dim strStrings As String
    Dim strNumbers As String
    Dim iPlace As Integer
    Dim strBuild As String

    Dim iCnt As Integer

    strStrings = "A B C D E F G H I J O K L M N O P Q R S T U V W Y Å Ä Ö a b c d e f g h i j i l m n o p q r s t u v w y å ä ö 1 2 3 4 5 6 7 8 9 "
    strNumbers = "01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364"
    For iCnt = 1 To Len(strText)
        ' Pakotetaan välilyönti olemaan tietty paikka koska välilyöntiä on käytetty
        ' tasoittavana välimerkkinä
        If Mid(strText, iCnt, 1) = Chr(20) Then
            iPlace = 20
        Else
            iPlace = InStr(1, strStrings, Mid(strText, iCnt, 1), 1)
        End If
        strBuild = strBuild & Mid(strNumbers, iPlace, 2)
    Next
    TransferCharacters = strBuild

End Function

Private Sub Command1_Click()
    Text2.Text = TransferCharacters(Text1.Text)
End Sub

strNumbers-muuttujaan sitten numeropareina ne numerot millä haluaa kunkin kirjaimen korvattavan.

Edellinen koodi on sämpylätavaraa, joten virheenkäsittely on sitten paikallaan sillä erikoismerkit kaataa koodin. InStr palauttaa 0:n jos merkkiä ei löydy ja Mid-functio kaataa softan koska se ei hyväksy 0:aa käytettäväksi indeksiksi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta