VB ja tietotyypit

Kuinka koodia pitää muuttaa allaolevassa ohjelmassa, jos haluan poimia numeroita keskeltä merkkijonoa (esimerkiksi kun tiedot saadaan muodossa anne12virtanen, pekka9kaarela) enkä tiedä numeroiden määrää enkä niiden indeksiä, eli ne pitäisi poimia tietotyypin perusteella?


Moduli1

Option Base 1
Public Henkilo(5) As Variant




Private Sub cmdAnna_Click()
Cls
Prompt = "Anna nimi ja ikä muodossa annevirtanen09 (ikä kahdella numerolla)! "
For i = 1 To 5
Title = "Henkilönumero" & i
Henkilo(i) = InputBox(Prompt, Title)

Next i

End Sub

Private Sub cmdSulje_Click()
End
End Sub

Private Sub Command2_Click()
Print "Henkilöiden iät ja niiden keskiarvo"
Print
For i = 1 To 5
Print "Ikä on:"; i; "duunari", Right(Henkilo(i), 2)
Summa! = Summa! Right(Henkilo(i), 2)
Keskiarvo = Summa / 5
Next i
Label1.Caption = Keskiarvo

End Sub
131841
Äänestä

Muut lukivat myös

Vastaukset 13

Vanhimmat

Elikkä ihmesanat on "regular expression". En osaa visual basiccia niin en pysty kuin osoittaa oikeeseen suuntaan :)

Jos ei helpistä löydy niin kato täältä:
http://www.google.fi/search?hl=fi&ie=UTF-8&q="visual basic" "regular expression"&btnG=Hae&lr=

Äänestä
  • Ei tuo nyt vielä mene jakeluun. Ehkä myöhemmin. Etsin sellaista ratkaisua. joka poimisi merkkijonosta(taulukosta) ko. tietotyypin alkiot siinä järjestyksessä kuin ne esiintyvät. Olen vasta aloittanut tämän ohjelmoinnin opettelun ;)

    Äänestä

  • Jukkis kirjoitti:

    Ei tuo nyt vielä mene jakeluun. Ehkä myöhemmin. Etsin sellaista ratkaisua. joka poimisi merkkijonosta(taulukosta) ko. tietotyypin alkiot siinä järjestyksessä kuin ne esiintyvät. Olen vasta aloittanut tämän ohjelmoinnin opettelun ;)

    Eikö VB:n val()-funktio lue vain numeroiksi käyvät merkit merkkijonosta?

    Esim. näin:
    The following returns the value 1615198:
    Val(" 1615 198th Street N.E.")

    Äänestä

  • Inssi kirjoitti:

    Eikö VB:n val()-funktio lue vain numeroiksi käyvät merkit merkkijonosta?

    Esim. näin:
    The following returns the value 1615198:
    Val(" 1615 198th Street N.E.")

    mutta en keksi, miten merkitsisin asian, kun pitäisi lukea se tästä taulukosta

    Public Henkilo(5) As Variant

    eli mihin kohtaan lainausmerkit, kun merkkijono (taulukko) on ylläolevan näköinen ja pitäisi lukea sieltä kokonaisluvut.

    Yritys on ollut kovaa mutta keinot alkavat loppua kesken ;-)

    Äänestä

  • Jukkis kirjoitti:

    mutta en keksi, miten merkitsisin asian, kun pitäisi lukea se tästä taulukosta

    Public Henkilo(5) As Variant

    eli mihin kohtaan lainausmerkit, kun merkkijono (taulukko) on ylläolevan näköinen ja pitäisi lukea sieltä kokonaisluvut.

    Yritys on ollut kovaa mutta keinot alkavat loppua kesken ;-)

    Tässä koodia. Laskee peräkkäiset numerot merkkijonosta.
    Keskiarvon laskeminen tapahtuu for-next-luupin jälkeen.

    Dim Ika as String

    For i = 1 To 5
       Ika = ""
       For j = 1 To Len(henkilo(i))
          If Asc(Mid(henkilo(i), j, 1)) >= Asc("0") And Asc(Mid(henkilo(i), j, 1))

    Äänestä

  • Jukkis kirjoitti:

    mutta en keksi, miten merkitsisin asian, kun pitäisi lukea se tästä taulukosta

    Public Henkilo(5) As Variant

    eli mihin kohtaan lainausmerkit, kun merkkijono (taulukko) on ylläolevan näköinen ja pitäisi lukea sieltä kokonaisluvut.

    Yritys on ollut kovaa mutta keinot alkavat loppua kesken ;-)

    Tässä olis kokeeksi toinen vaihtoehto. Siitä on kyllä aikaa kun ole basicilla koodannut mutta jotenkin noin se ehkä menee. Siis ei lainausmerkkejä koska sinulla ne merkkijonot muuttujassa henkilo.

    Private Sub Command2_Click()
    Keskiarvo As Long
    Summa As Integer=0
    Print "Henkilöiden iät ja niiden keskiarvo"
    Print

    For i = 1 To 5
    Print "Ikä on:"; i; "duunari ", val(Henkilo(i))
    Summa = Summa val(Henkilo(i))
    Next i

    Keskiarvo = Summa / 5
    Label1.Caption = Str(Keskiarvo)

    End Sub

    Äänestä

  • Testasin VBSriptillä tuota regular expressionia, kaipa se samalla lailla toimii visual basicissakin.

    VBScript:

    str = "Seppo245Seponheimo"

    Set objRegexp = New RegExp
    objRegexp.Pattern = "^[^0-9] (\d )[^0-9] $"

    Set objMatches = objRegexp.Execute(str)

    MsgBox(objMatches(0).SubMatches(0))

    Äänestä

  • Koodia2 kirjoitti:

    Tässä olis kokeeksi toinen vaihtoehto. Siitä on kyllä aikaa kun ole basicilla koodannut mutta jotenkin noin se ehkä menee. Siis ei lainausmerkkejä koska sinulla ne merkkijonot muuttujassa henkilo.

    Private Sub Command2_Click()
    Keskiarvo As Long
    Summa As Integer=0
    Print "Henkilöiden iät ja niiden keskiarvo"
    Print

    For i = 1 To 5
    Print "Ikä on:"; i; "duunari ", val(Henkilo(i))
    Summa = Summa val(Henkilo(i))
    Next i

    Keskiarvo = Summa / 5
    Label1.Caption = Str(Keskiarvo)

    End Sub

    Tuolla tapaa Val antaa vain nollia (ainakin minulla). Olis kiva jos joku guru kertoisi sen ihan tarkan koodin. Meita alottelijoita riittää ja toi poiminta ei ole ainakáan mulle selvinnyt oppikirjoita.

    Äänestä

  • Raili kirjoitti:

    Tuolla tapaa Val antaa vain nollia (ainakin minulla). Olis kiva jos joku guru kertoisi sen ihan tarkan koodin. Meita alottelijoita riittää ja toi poiminta ei ole ainakáan mulle selvinnyt oppikirjoita.

    Val funktio palauttaa vain merkkijonon alussa olevat luvut,Ei siis toimi tässä tapauksessa.
    Kotikoodarin koodi on ok.
    Dim Ika as String

    For i = 1 To 5
    Ika = ""
    For j = 1 To Len(henkilo(i))
    If Asc(Mid(henkilo(i), j, 1)) >= Asc("0") And Asc(Mid(henkilo(i), j, 1)) = Asc("0") And Asc(Mid(henkilo(i), j, 1))

    Äänestä

  • Kunde kirjoitti:

    Val funktio palauttaa vain merkkijonon alussa olevat luvut,Ei siis toimi tässä tapauksessa.
    Kotikoodarin koodi on ok.
    Dim Ika as String

    For i = 1 To 5
    Ika = ""
    For j = 1 To Len(henkilo(i))
    If Asc(Mid(henkilo(i), j, 1)) >= Asc("0") And Asc(Mid(henkilo(i), j, 1)) = Asc("0") And Asc(Mid(henkilo(i), j, 1))

    Ei tuo koodi toimi siinä tarkoituksessa kuin alkuperäinen kysyjä esitti. Hän halusi lukea annetut numerot jopa tekstin keskeltä määrittämättömästä paikasta (tai vaikka lopusta).
    Olen ilolla seurannut tätä kysymystä. Olen itse koodannut jonkinverran, mutta tämä vaikuttaakin yllättävän hankalta, vaikka kuvittelin tehtävän helpoksi.

    Eli jos ymmärsin oikein

    taulukossa on tietoja muodossa

    anne12juhonen
    pertti9purola
    antero101virtanen

    ja kaikista taulukon jonoista pitäisi saada numerot erikseen (mahdollisesti toiseen taulukkoon)

    Jälkimmäisessä vaihtoehdossa(koodi) toteutus tulisi varmaankin pysähtymään tuohon Rangeen

    Äänestä

  • Timppa kirjoitti:

    Ei tuo koodi toimi siinä tarkoituksessa kuin alkuperäinen kysyjä esitti. Hän halusi lukea annetut numerot jopa tekstin keskeltä määrittämättömästä paikasta (tai vaikka lopusta).
    Olen ilolla seurannut tätä kysymystä. Olen itse koodannut jonkinverran, mutta tämä vaikuttaakin yllättävän hankalta, vaikka kuvittelin tehtävän helpoksi.

    Eli jos ymmärsin oikein

    taulukossa on tietoja muodossa

    anne12juhonen
    pertti9purola
    antero101virtanen

    ja kaikista taulukon jonoista pitäisi saada numerot erikseen (mahdollisesti toiseen taulukkoon)

    Jälkimmäisessä vaihtoehdossa(koodi) toteutus tulisi varmaankin pysähtymään tuohon Rangeen

    Kotikoodarin koodiahan teke just niin?

    Äänestä

  • Kunde kirjoitti:

    Kotikoodarin koodiahan teke just niin?

    Ehkä mulla on joku virhe. Yritetään uusetaan!!!

    Äänestä

  • Kotikoodari kirjoitti:

    Tässä koodia. Laskee peräkkäiset numerot merkkijonosta.
    Keskiarvon laskeminen tapahtuu for-next-luupin jälkeen.

    Dim Ika as String

    For i = 1 To 5
       Ika = ""
       For j = 1 To Len(henkilo(i))
          If Asc(Mid(henkilo(i), j, 1)) >= Asc("0") And Asc(Mid(henkilo(i), j, 1))

    Jeess

    Äänestä

Kommentoi aloitusta


jukkis kirjoitti:

Kuinka koodia pitää muuttaa allaolevassa ohjelmassa, jos haluan poimia numeroita keskeltä merkkijonoa (esimerkiksi kun tiedot saadaan muodossa anne12virtanen, pekka9kaarela) enkä tiedä numeroiden määrää enkä niiden indeksiä, eli ne pitäisi poimia tietotyypin perusteella?


Moduli1

Option Base 1
Public Henkilo(5) As Variant




Private Sub cmdAnna_Click()
Cls
Prompt = "Anna nimi ja ikä muodossa annevirtanen09 (ikä kahdella numerolla)! "
For i = 1 To 5
Title = "Henkilönumero" & i
Henkilo(i) = InputBox(Prompt, Title)

Next i

End Sub

Private Sub cmdSulje_Click()
End
End Sub

Private Sub Command2_Click()
Print "Henkilöiden iät ja niiden keskiarvo"
Print
For i = 1 To 5
Print "Ikä on:"; i; "duunari", Right(Henkilo(i), 2)
Summa! = Summa! Right(Henkilo(i), 2)
Keskiarvo = Summa / 5
Next i
Label1.Caption = Keskiarvo

End Sub

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu