Kirjautuminen

Haku

Tehtävät

Koodit: QB: Split-funktio

Kirjoittaja: sooda

Kirjoitettu: 07.05.2004 – 07.05.2004

Tagit: teksti, koodi näytille, vinkki

Splitti qb:lle. Eli explode. Eli pilkkoo stringin osiin. Perskuta kun qb:ssä funkkarit ei voi palauttaa taulukkoa, sille pitää antaa taulukko johon ne tungetaan. Mutta ihan toimiva :P

Ite funkkari

'split%: splittaa stringin ja palauttaa montako osaa l?ytyi yht.
'parametrit:
' stringi$: merkkijono joka splitataan
' erotin$: erotin joka on splitattavien tekstien v?liss?
' taulu$(): taulukko johon tekstit menee
' max%: jos t?m? m??r? ylittyy, ei splittailla en??. < 1 niin haetaan kaikki
FUNCTION split% (stringi$, erotin$, taulu$(), max%)

    se$ = stringi$ 'ei rikota alkuper?ist? teksti?...
    kohta% = INSTR(se$, erotin$) 'miss? kohdassa on eka erotin$
    IF kohta% = 0 THEN EXIT FUNCTION'jos ei ole yht??n niin ei anneta yht??n
    WHILE kohta% 'etsit??n lis?? kunnes ei erotinta l?ydy en??
        taulu$(ne%) = LEFT$(se$, kohta% - 1) 'lis?t??n l?ydetty taulukkoon
        se$ = MID$(se$, kohta% + LEN(erotin$)) 'irrotetaan jo l?ydetty
        ne% = ne% + 1 'lis?t??n laskuria
        kohta% = INSTR(se$, erotin$) 'miss? kohdassa seuraava erotin$
        IF ne% = max% THEN 'jos ei haluta en?? niin ei anneta en??
            split% = ne%
            EXIT FUNCTION
        END IF
    WEND
    taulu$(ne%) = se$ 'viimeinen osa
    split% = ne% + 1 'kerrotaan montako l?ytyi

END FUNCTION

testiohjelma

'esimerkkiohjelma joka n?ytt?? kuinka tota k?ytet??n
DIM m$(3) 'taulukko johon ne tulee
PRINT split("no;hei;erkki", ";", m$(), 0)'kerrotaan montako l?ytyi
PRINT m$(0) 'ja kerrotaan ne jotka l?ytyi.
PRINT m$(1)
PRINT m$(2)

Kommentit

hunajavohveli [08.05.2004 08:56:29]

#

Kätevää. Käytin samantyylisiä keinoja kerran, kun tein funktion, joka palauttaa osan, joka sijaitsee merkkijonossa kahden merkin välissä. Sillä sai etsiä esim. sulkujen, tai lainausmerkkien väliin pistettyjä huomautuksia. En muuten tiennyt, että INSTR toimii QB:ssäkin. No nytpähän tiedän. :)

neau33 [13.02.2009 11:56:03]

#

Heippa!

'QBasic SPLIT
DECLARE SUB SPLIT (mjono$, erotin$)
  REDIM SHARED SplitStr(0) AS STRING

  'Testi
   SPLIT "12345|23456|34567|45678|56789", "|"
   IF SplitStr(0) <> "" Then
     FOR i = 0 TO UBOUND(SplitStr)
       PRINT SplitStr(i)
     NEXT i
   END IF

   SPLIT "ABCDE,FGHIJ,KLMNO,PQRST,UVWXY", ","
   IF SplitStr(0) <> "" THEN
     FOR i = 0 TO UBOUND(SplitStr)
       PRINT SplitStr(i)
     NEXT i
   END IF
   SYSTEM

SUB SPLIT (mjono$, erotin$)
  REDIM SplitStr(0)

  IF INSTR(mjono$, erotin$) = 0 THEN
    EXIT SUB
  END IF

  DIM i AS LONG, j AS LONG
  FOR i = 1 TO LEN(mjono$)
    IF MID$(mjono$, i, 1) <> erotin$ THEN
      SplitStr(UBOUND(SplitStr)) = SplitStr(UBOUND(SplitStr)) + MID$(mjono$, i, 1)
      REDIM temp(UBOUND(SplitStr) + 1) AS STRING
    ELSEIF MID$(mjono$, i, 1) = erotin$ THEN
      FOR j = 0 TO UBOUND(SplitStr)
        temp(j) = SplitStr(j)
      NEXT j
      REDIM SplitStr(UBOUND(temp)) AS STRING
      FOR j = 0 TO UBOUND(temp)
        SplitStr(j) = temp(j)
      NEXT j
      ERASE temp
    END IF
  NEXT i
END SUB

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta