Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Merkkijonosta erottaminen (QB)

Grey [07.05.2004 12:43:03]

#

Olen tässä yrittänyt kolme päivää ratkoa erästä merkkijonoihin liittyvää ongelmaa. Eli siis, on esim. muuttuja ABC$, jossa on "A1,B3,C5". A, B ja C ovat merkkejä, joilla on arvot 1, 3, ja 5. Olen yrittänyt rakentaa aliohjelmaa, joka antaa halutun merkin/merkkijonon arvon tuosta. Eli esim. MERKKI B, jollainka palautuu arvo 3 tai muu kyseisen merkkijonon arvo. Jos merkkiä/merkkijonoa ei ole, palautuu arvo -1. Arvo löytyy tietystä muuttujasta, joka on määritelty aiemmin DIM SHAREDin avulla. Arvo on aina numero.

Omat yritykseni ovat saaneet aikaan ainoastaan virheellistä toimintaa. Pari kertaa jopa järjestelmän menemisen lukkoon (ja minulla on sentään Windows 2000. Hyvä minä!). Joten lienee kenties syytä pyytää ehkä hieman apua tässä. Ties vaikka saisin vahingossa tuhottua koneeni lopullisesti. Tai huonommalla tuurilla aiheutan elektronisen maailmanlopun..

-Grey-

sooda [07.05.2004 13:29:46]

#

Onkos noi arvot jotenkin taulukossa? Mä tekisin tämän näin:

const yht=1 'yhteensä merkkejä joilla on arvo
dim shared arvot%(yht) 'merkkien/stringien arvot
dim shared minkarvot$(yht) 'esim jos minkarvot$(666) on "moro" niin moro:n arvo on arvot%(666)
'...
'tähän jotain sorsaa missä tehdään tekstiä ja setataan arvoja...
'...
function arvo(teksti$)

    for i=1 to yht
        if teksti$=minkarvot$(i) then
            arvo=arvot%(i)
            exit sub
        endif
    next
    arvo=-1

end function

Grey [07.05.2004 14:50:02]

#

Okei, katselin selitystäni hieman tarkemmin ja huomasin sen olevan hieman vajaa. Eli siis, merkkijonot ovat taulukossa tähän tyyliin:

DIMS$(4) = "A1,B3,C9"
DIMS$(8) = "AA7,B3,OK13"
DIMS$(16) = "P4,WIN95,NT4"

Jotta noita voisi kutsua, tarvitaan vielä jonkinlainen ID. Toisin sanoen ei MERKKI A, vaan MERKKI "A", 4. Se että jos kyseinen ID ei omaa A:ta ei haittaa. Se vain palauttaisi silloin arvon -1.

-Grey-

hunajavohveli [07.05.2004 20:56:03]

#

En tiedä pitäisikö antaa koodia suoraan, mutta pistin nyt kuitenkin. Tekaisin viidessä minuutissa, joten voi olla bugeja.

DECLARE FUNCTION ID! (a$, e$)
CLS

a$ = "A4 NT7 X6"

PRINT ID(a$, "NT")  'ensimmäinen parametri on merkkijono josta etsitään
                   'toinen parametri on merkki(jono), jota seuraava numero halutaan palautusarvoksi

FUNCTION ID (a$, e$)

FOR a = 1 TO LEN(a$)
FOR b = 1 TO LEN(a$) - a + 1

   IF MID$(a$, a, b) = e$ THEN

      ID = VAL(MID$(a$, a + LEN(e$), 1))
   END IF

NEXT b
NEXT a

END FUNCTION

Antti Laaksonen [07.05.2004 23:08:54]

#

Tässä on yksinkertainen mutta toimiva funktio:

FUNCTION HaeNumero% (mj$, k$)
   m% = INSTR(mj$, k$)
   IF m% = 0 THEN
      HaeNumero% = -1
   ELSE
      HaeNumero% = VAL(MID$(mj$, m% + 1))
   END IF
END FUNCTION

Käyttöesimerkki:

ABC$ = "A1,B3,C5"

PRINT HaeNumero(ABC$, "B") '3

Vastaus

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

Tietoa sivustosta