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
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"
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
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=
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.")
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))
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
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))
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))
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?
Ehkä mulla on joku virhe. Yritetään uusetaan!!!
Jeess