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-
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 functionOkei, 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-
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 FUNCTIONTä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 FUNCTIONKäyttöesimerkki:
ABC$ = "A1,B3,C5" PRINT HaeNumero(ABC$, "B") '3
Aihe on jo aika vanha, joten et voi enää vastata siihen.