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 function
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-
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
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.