Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: löytyykö text1 laatikosta

Sivun loppuun

Jasmin [18.03.2004 20:35:59]

#

eli miten teen koodia että se tarkistaa kun olen painanut command1:stä niin se katsoo onko text1:sessä sanaa päivi. Jos on niin tulee msgbox joka sanoo hei päivi?

rndprogy [18.03.2004 20:40:17]

#

if text1.text = "päivi" then msgbox "hei päivi"

Jasmin [18.03.2004 20:41:05]

#

ei tuota! se on se ainoastaan jos siinä lukee päivi ja ei muuta!

hunajavohveli [18.03.2004 20:47:43]

#

Private Sub Command1_Click()

For a = 1 To Len(Text1.Text)
For b = 1 To Len(Text1.Text)
If Mid$(Text1.Text, a, b) = "päivi" Then Joo = 1
Next b
Next a

If Joo = 1 Then MsgBox ("Hei päivi")

End Sub

Tuo koodi pilkkoo kirjoitetun tekstin kaikkiin mahdollisiin pätkiin ja tarkistaa ne. Jos yksikin niistä on "päivi", silloin asetetaan joo-muuttujan arvo todeksi. Kun tarkistus on tehty, katsotaan, mikä on joon tilanne. Jos se on tosi, näytetään teksti.

Miksi se piti tehdä joon kanssa? No, muuten se message olisi voinut näkyä useamman kerran.

minapamina [18.03.2004 20:49:19]

#

Private Sub Command1_Click()
    If InStr(Text1.Text, "päivi") Then MsgBox "hei päivi"
End Sub

hunajavohveli [18.03.2004 20:51:19]

#

Ai, VB:ssä on siis jo valmiiksi funktio tuota varten.

Jasmin [19.03.2004 16:28:30]

#

en usko että on edes mahdollista, mutta onko mahdollista laittaa että kirjoitan "hei ja joku nimi" ja kun painan command1:stä niin text2:seen tulee pelkästään hein jälkeen tuleva nimi?

rndprogy [19.03.2004 16:57:54]

#

lainaus:

en usko että on edes mahdollista

Ohjelmoimalla kaikki on mahdollista.

jcd3nton [19.03.2004 17:07:02]

#

lainaus:

Ohjelmoimalla kaikki on mahdollista.

Ei nyt ihan niinkään.

Mutta tuo mitä Jasmin kysyi on mahdollista (jos nyt ymmärsin sen oikein).

T.M. [19.03.2004 17:26:00]

#

lainaus:

lainaus:

Ohjelmoimalla kaikki on mahdollista.

Ei nyt ihan niinkään.

Kylläpäs :P

Jasmin [19.03.2004 18:38:20]

#

niin, mutta miten?

Antti Laaksonen [19.03.2004 20:19:47]

#

Toki moinen on mahdollista. Esim. voit tarkistaa Left-funktiolla neljä ensimmäistä merkkiä, ja jos ne ovat "moi" ja välilyönti, näyttää teksti Mid-funktiolla viidennestä merkistä lähtien. Tässä esimerkki:

If Left(Text1.Text, 4) = "moi " Then
    MsgBox Mid(Text1.Text, 5)
End If

Jasmin [19.03.2004 20:53:20]

#

kiitos antti, mutta nyt ongelmana on se että se kirjoittaa kaiken 5 välistä asti alaspäin. Haluaisin sen siltä riviltä kaiken missä lukee moi päivi

Jasmin [20.03.2004 13:24:07]

#

nyt tällä alkaa olla jo kiire

hunajavohveli [20.03.2004 13:37:26]

#

Private Sub Command1_Click()

Do
For a = 1 To Len(Text1.Text)
For b = 1 To Len(Text1.Text)
If Mid$(Text1.Text, a, b) = "hei" Then Exit Do
Next b
Next a
Loop Until 1 = 1

Text2.Text = Mid$(Text1.Text, a + b + 1, 10)

End Sub

Ellei VB:ssä ole jo tätäkin varten omaa funktiota, joudut sittenkin käyttämään minun koodinpätkääni. Älä ihmettele tuota UNTIL 1 = 1, se on sitä varten, että pystytään poistumaan kahden silmukan sisältä heti kerralla. Lieneeköhän tähänkin joku parempi keino?
Jos ymmärsin oikein mitä tarkoitit, niin tämä koodi lukee text1:sen tekstin, etsii siitä sanan "hei", ja kirjoittaa text2:seen kaiken mitä "hein" jälkeen tulee. (kymmeneen merkkiin asti) sen 10 voi vaihtaa koodia muokkaamaalla.

Edit:
Ja tottahan toki tällainen on mahdollista. Ohjelmoinnissa on periaatteessa mahdollista kaikki, minkä tietokone pystyy suorittamaan. Tällainen koodi on ihan "mahdollisimmasta" päästä. Niin että paljon mahdottomammaltakin tuntuvia asioita on.

Jasmin [20.03.2004 13:51:58]

#

olisiko mitään helpompaa tapaa?

hunajavohveli [20.03.2004 15:54:38]

#

Jos on niin minä en sellaista tiedä. Tuohan toimii niin miten halusit, vai toimiiko? Miksi se ei kelpaa?

sooda [20.03.2004 15:56:47]

#

tuon

Do
For a = 1 To Len(Text1.Text)
For b = 1 To Len(Text1.Text)
If Mid$(Text1.Text, a, b) = "hei" Then Exit Do
Next b
Next a
Loop

voi toki tehdä helpommpinkin:

Do
For a = 1 To Len(Text1.Text)
If Mid$(Text1.Text, a, len("hei")) = "hei" Then Exit Do
Next a
Loop

ei vaihdat "hei" tekstin tilalle vaikka jonkun muuttujan.

hunajavohveli [20.03.2004 16:01:55]

#

Unohdit ottaa yhden asian huomioon sooda. Jos tekstistä ei löydy sanaa "hei", ohjelma jää loputtomaan luuppiin, josta ei koskaan pääse pois. :) UNTIL 1 = 1 varmistaa että luuppi loppuu silloinkin, jos "hei":tä ei löydy.

Edit: Toisaalta voisihan sen pistää myös

UNTIL -1

Jasmin [20.03.2004 16:03:43]

#

ei minä sekoilin taas! kiitos kiitos

sooda [20.03.2004 16:04:44]

#

aijjoo... mutta siis tota do-jutskuahan ei tarvitse tossa oikeastaan mihinkään...
eli:

For a = 1 To Len(Text1.Text)
If Mid(Text1.Text, a, len("hei")) = "hei" Then Exit for
Next a

hunajavohveli [20.03.2004 16:08:03]

#

No mutta sitten

Text2.Text = Mid$(Text1.Text, a + b + 1, 10)

Tarvitsee sekä muuttujat a ja b. b on kohta missä etsittävä sana loppuu. Olis ton kai voinu tehdä kahdella erillisellä luupilla ja jos etsittävä sana on aina "hei" pituus on vakiona aina 3... joo meneepäs monimutkaiseksi. :)

sqwiik [20.03.2004 16:11:21]

#

Seuraava hakee tietyn sanan jälkeisen sanan (joka kenties on nimi). Oletan, että kirjoittaja käyttää kuitenkin välejä :P

Dim TerSana As String
Dim Nimi As String
TerSana = "hei" 'Sana, jonka jälkeinen sana on siis nimi
Nimi = ""
a = InStr(Text1.Text, TerSana) 'Mistä alkaa
For b = a + Len(TerSana) + 1 To Len(Text1.Text) 'haetaan seuraavan sanan loppua
  If Mid(Text1.Text, b, 1) = " " Then 'Seuraavan sanan loppu
    Nimi = Mid(Text1.Text, a, (b - a))
    Exit For
  End If
Next b

Ja nyt on nimi selvillä :)

MsgBox "No terve, " & Nimi & "!"

hunajavohveli [20.03.2004 17:06:30]

#

Mutta jäin vaan yhä miettimään mitä se "helpoin" tapa tarkoitti. Ei kai siinä ollut kysymys koodin pituudesta...? Ei VB:ssä nyt sentään kaikkeen omia funktioita ole. Niitä voi kaikeksi onneksi tehdä itse. :)

Jasmin [20.03.2004 17:41:24]

#

lainaus:

Mutta jäin vaan yhä miettimään mitä se "helpoin" tapa tarkoitti. Ei kai siinä ollut kysymys koodin pituudesta...? Ei VB:ssä nyt sentään kaikkeen omia funktioita ole. Niitä voi kaikeksi onneksi tehdä itse. :)

yhdelle riville tarkoitettua siis

hunajavohveli [20.03.2004 19:25:22]

#

No kokeile muuntaa tuo koodi funktioksi, jota sitten voi kutsua yhdellä ainoalla käskyllä. Sitä funktiota itseään ei kyllä saa pienempään tilaan.

Jasmin [20.03.2004 20:27:33]

#

mikä olisi nopein tapa ladata ja soittaa wav tiedosto?

sqwiik [20.03.2004 20:37:16]

#

Inline ASM, mutta sitä en sinulle suosittele...
Muista, että o-putkassa on haku!
Tästä on ollut ennenkin keskustelua:
Tämä on lähinnä ongelmaasi: https://www.ohjelmointiputka.net/keskustelu/3882-kysymys-taas-vb
Ja sitten muita samaa aihetta:
https://www.ohjelmointiputka.net/keskustelu/3138-wav-tiedostot-vb-ssä
https://www.ohjelmointiputka.net/keskustelu/441-ääni-vb
Jopa vinkki!
https://www.ohjelmointiputka.net/koodivinkit/23466-vb6-wav-tiedoston-soittaminen

sooda [20.03.2004 20:37:22]

#

https://www.ohjelmointiputka.net/koodivinkit/23466-vb6-wav-tiedoston-soittaminen

peki [20.03.2004 20:40:35]

#

Käytä Windowsin API -funktiota sndPlaysound()
eli:

Option Excplicit:n alle

Public Declare Function sndPlaySound& Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long)

Ja sitten jonnekkin sopivaan aliohjelmaan:

Dim wFlags%, X%
wFlags% = SND_ASYNC Or SND_NODEFAULT
X% = sndPlaySound("C:\Soundi.wav", wFlags%)

En tätä oo testannu mitenkään, mutta pitäis toimia

jv_windy [21.03.2004 23:30:41]

#

Vielä tuohon "<tekstiä> Hei Nimi <tekstiä>"-ongelmaan jonka josta pitäisi löytää nimi. Kyllä se ilman looppiakin onnistuu (sama idea kuitenkin), mutta ei yhdelle riville mahdu luultavasti pakollisen If-lauseen takia.

Dim Nimi_alku, SeuraavaVali As String
Const HeiSana As String = "Hei"

Nimi_alku = InStr(Text1.Text, HeiSana) + Len(HeiSana) + 1
SeuraavaVali = InStr(Nimi_alku, Text1.Text, " ")

If SeuraavaVali = 0 Then
    MsgBox HeiSana & " " & Mid(Text1.Text, Nimi_alku) & "!"
Else
    MsgBox HeiSana & " " & Mid(Text1.Text, Nimi_alku, SeuraavaVali - Nimi_alku) & "!"
End If

Splittauksella saattaisi onnistua yhdellä rivillä, mutta se ei olisi tehokasta koodin toiston takia.


Sivun alkuun

Vastaus

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

Tietoa sivustosta