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?
if text1.text = "päivi" then msgbox "hei päivi"
ei tuota! se on se ainoastaan jos siinä lukee päivi ja ei muuta!
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.
Private Sub Command1_Click() If InStr(Text1.Text, "päivi") Then MsgBox "hei päivi" End Sub
Ai, VB:ssä on siis jo valmiiksi funktio tuota varten.
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?
lainaus:
en usko että on edes mahdollista
Ohjelmoimalla kaikki on mahdollista.
lainaus:
Ohjelmoimalla kaikki on mahdollista.
Ei nyt ihan niinkään.
Mutta tuo mitä Jasmin kysyi on mahdollista (jos nyt ymmärsin sen oikein).
lainaus:
lainaus:
Ohjelmoimalla kaikki on mahdollista.
Ei nyt ihan niinkään.
Kylläpäs :P
niin, mutta miten?
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
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
nyt tällä alkaa olla jo kiire
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.
olisiko mitään helpompaa tapaa?
Jos on niin minä en sellaista tiedä. Tuohan toimii niin miten halusit, vai toimiiko? Miksi se ei kelpaa?
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.
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
ei minä sekoilin taas! kiitos kiitos
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
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. :)
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 & "!"
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. :)
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
No kokeile muuntaa tuo koodi funktioksi, jota sitten voi kutsua yhdellä ainoalla käskyllä. Sitä funktiota itseään ei kyllä saa pienempään tilaan.
mikä olisi nopein tapa ladata ja soittaa wav tiedosto?
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/
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
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.