Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: [VB] Sanat riveille jne

Sivun loppuun

JussiR [05.02.2007 00:04:38]

#

Mulla on pari tuhatta sanaa jotka on tällä tavalla: "sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana sana"
ja haluaisin jokaisen omalle rivilleen näin:
"sana
sana
sana
sana
sana
sana
sana
sana
sana
sana
sana
sana"

Mitenkäs tuo onnistuisi?

Ja sitten vielä että miten saisin kun mulla on teksti jossa on sanoja riveillä ja haluaisin että se poistaisi kaikki rivit joissa on alle 5 merkkiä?
Kuinkas sellaisen ohjelman teen?

setä [05.02.2007 00:14:36]

#

Jos sulla on VB6 niin Replace-funktiolla voit korvata välilyönnin rivinvaihtomerkillä vbCrLf. Jos aiempi versio niin kopioit tekstin uudeksi korvaamalla välilynnit rivivaihtomerkillä.
Rivin pituuden saat selville Len-funktiolla ja rivin loppukohdan InStr-funktiolla jolla haetaan rivinvaihdot eli merkkiyhdistelmä vbCrLf. Jos rivin pituus on alle 5 merkkiä jätät sen kopioimatta.

JussiR [05.02.2007 00:21:21]

#

Olisi kiva jos voisit näyttää esimerkin.

Blaze [05.02.2007 01:19:52]

#

Dim lehma As String, lammas As String
lehma = "moomoomoomoomoo"
lammas = Replace(lehma, "o", "ä")
MsgBox lammas 'tulostaa määmäämäämäämää

JussiR [05.02.2007 14:06:56]

#

Kiitos, laitoin textboxiin pari tuhatta sanaa ja käytin tuota mutta textboxiin jäi vain kolmasosa sanoista. Mihinkäs loput hävisi?
Miten tuota Len-funktiota käytetään?

BadSource [05.02.2007 14:11:51]

#

Haku olisi antanut useita esimerkkejä, mutta tässä yksi lisää...

Dim rivi As String: rivi = "FooBar"

MsgBox Len(rivi) 'palauttaa messageboxilla arvon 6

Laaksonen(?) on listannut tuon ja vastaavia tuonne.

JussiR [05.02.2007 14:20:57]

#

Mitenkäs tuolla saan että se poistaa rivit joilla on alle 5 merkkiä?

BadSource [05.02.2007 14:34:50]

#

Jos lähtökohta on tuo aloitusviestin sana-rivi, niin Split-funktiolla (löytyy edellisen viestini linkin alta Merkkijonoista) saat pilkottua rivisi välilyöntien kohdalta taulukoksi. Käyt sitten taulukkosi solut läpi esimerkiksi For-silmukalla. Jos solun pituus on vähintään 3 merkkiä, niin arvo kopioidaan jonnekkin talteen (toinen taulukko, merkkijono tms.), muuten solun sisällölle ei tehdä mitään.

JussiR [05.02.2007 15:05:21]

#

Luulisi että sen vois helpommalla tehdä.
Miten saan että "rivinteksti" on aluksi rivin 1 teksti sen jälkeen rivin 2 teksti jne.?

Dim rivi As Integer
Dim rivinteksti As Integer

Private Sub Poista()
Do Until rivinteksti = ""
rivi = rivi + 1
rivinteksti = 'Koodia tähän, Text1:ssä on sanat riveillä
If Len(rivinteksti) => 5 Then List1.AddItem rivinteksti
Loop
End Sub

BadSource [05.02.2007 15:22:23]

#

Dim KokoRoska As String
Dim Splitti As Variant
Dim i As Integer

KokoRoska = "Sana sanoi Sanalle: sana sana sana sana sana"
Splitti = Split(KokoRoska, Space(1)) 'jos rivitetty, niin pilkotaan vbCrLf:n kohdalta
For i = LBound(Splitti) To UBound(Splitti)
    If Len(Splitti(i)) < 5 Then
        List1.AddItem Splitti(i)
    End If
Next i

Edellinen koodi lisää List1-listaan 6 Sana-sanaa deletoiden kaikki laumasta poikkeavat (sanoi ja Sanalle:). Siitä sitten soveltamaan...

JussiR [05.02.2007 15:38:32]

#

Tästä ei tapahtunu mitään:

Private Sub Command1_Click()
Dim Splitti As Variant
Dim i As Integer

Splitti = Split(Text1.Text, Space(1)) 'jos rivitetty, niin pilkotaan vbCrLf:n kohdalta
For i = LBound(Splitti) To UBound(Splitti)
    If Len(Splitti(i)) < 5 Then Text2.Text = Text2.Text & vbCrLf & Splitti(i)
Next i
End Sub

Ja tästä tuli virhe "Expected array":

Private Sub Command1_Click()
Dim Splitti As Variant
Dim i As Integer

Splitti = Split(Text1.Text, vbCrLf(1)) 'jos rivitetty, niin pilkotaan vbCrLf:n kohdalta
For i = LBound(Splitti) To UBound(Splitti)
    If Len(Splitti(i)) < 5 Then Text2.Text = Text2.Text & vbCrLf & Splitti(i)
Next i
End Sub

Blaze [05.02.2007 16:05:13]

#

JussiR kirjoitti:

Ja tästä tuli virhe "Expected array":

Split palauttaa taulukon, siis Dim Splitti() As String

JussiR [05.02.2007 16:07:06]

#

Sit sanoo Lboundista ton virheen.

Antti Laaksonen [05.02.2007 19:56:24]

#

Rivinvaihdon merkki on vbCrLf, ei siis vbCrLf(1). Tästä johtui, että VB "odotti taulukkoa". Muuttuja Splitti voi olla tyypiltään yhtä hyvin Variant kuin String-taulukko. Muuta ehtoa sen mukaan, pitääkö liian lyhyet sanat karsia (>= 5) vai säilyttää (< 5).

JussiR [05.02.2007 21:39:00]

#

Antti Laaksonen kirjoitti:

Rivinvaihdon merkki on vbCrLf, ei siis vbCrLf(1). Tästä johtui, että VB "odotti taulukkoa". Muuttuja Splitti voi olla tyypiltään yhtä hyvin Variant kuin String-taulukko. Muuta ehtoa sen mukaan, pitääkö liian lyhyet sanat karsia (>= 5) vai säilyttää (< 5).

Joo. Nyt sain sen toimimaan, mutta tulee overflow, koska on niin paljon sanoja. :(

BadSource [06.02.2007 07:12:50]

#

Vaihda i:n muoto integeristä (arvo maksimissaan ~32700) longiksi (arvo maksimissaan ~2,15 miljardia), eli...

Dim i As Long

Sivun alkuun

Vastaus

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

Tietoa sivustosta