Eli mulla on tällänen koodi
Public Function GetAllVars() As String
Dim X As Long
Dim Av() As String
Dim ArVar As String
Dim Final As String
'muutama muuttuja
ArVar = code.VarEnviron.Text 'haetaan muuttujat muuttujat muodossa muuttujannimi=arvo ja entteri
Av = Split(ArVar, vbCrLf) 'koko muuttujataulukko splitataan enttereiden välein
For X = 0 To UBound(Av) 'x on taulukon indexi 0sta loppuun saakka
fPos = InStr(Av(X), "=") ' fpos muuttuja on taulukon x indexin ensimmäinen "=" merkki
Final = Final & Mid(Av(X), 1, fPos - 1) & ":" 'lisätään final muuttujaan taulukon x indexin 1 paikasta fpos -1 paikkaan
Next X 'seuraavaa
GetAllVars = Mid(Final, 1, Len(Final) - 1) 'palautetaan
End Function
Public Function ReplaceVars(CodeS As String) As String
Dim VarsIn As String
Dim Vars As String
Dim Vatr() As String
VarsIn = CodeS
Vars = GetAllVars
DoEvents
Vatr = Split(Vars, ":")
For i = 0 To UBound(Vatr)
VarsIn = Replace(VarsIn, "$" & Vatr(i), GetVar(Vatr(i)))
Next i
MsgBox VarsIn
ReplaceVars = VarsIn
End FunctionMistä johtuu että kun kutsutaan getallvars funktiota niin se ei palaudu enään sieltä vaan koodin suoritus lakkaa siihen replacevars funktiosta?
Noh kerrotaanpa tässä viel sitten että mihin tuota tarvitsen. Olen tuon ratkaissut toisella tavalla, mutta se menee jo aika purkaksi eli haluaisin tämän toimimaan. Olen tekemässä flashin tapaista "Actionscript" kieltä, joka on tämännäköistä
(Käytän C kielen kooditageja)
Generals {
Call, Format; //Kutsutaan funktiota nimeltä format
//Nytten tulee itse objektien luonti kohta
Load, 5; //Ladataan 5 kuva objektia muistiin
Create, pena, C:\kuva.bmp; //Luodaan objekti nimeltä pena
Var, riit, integer; //riit niminen muuttuja integeriksi
Set, riit, 850; //Laitetaan riitin arvo 850
}
Format {
//Alku koko systeemin alustus funktio
Def, $a, 0x0000; //Muistin alotuskohta
Def, $b, 5xFFFF; //Muistin lopetuskohta
//itse saa määritellä kuinkapaljon ohjelma maksimissaan saa käyttää muistia
Format, $a-$b, NULL; //Tyhjennetään objektimuisti sekä muuttujaympäristömuisti jotka ovat jääneet edelliseltä ajokerralta
Res, $a, $b; //Voi myös itse tässä laittaa arvot
//Nyt on alustettu koko höskä
}
OnOverflow { //Tämä funktio kutsutaan jos muuttujat tai objektit ylittävät muistille sallitun määrän
printf, Muistialueen ylitys; //Printataan konsoliin että on ylitetty
Show, msgbox:Ohjelmalle ei ole riittävästi muistia:Tiedoksi:Info; //Annetaan windows msgbox käyttäjälle ylityksestä
Quit, 1; //Häivytään ajotilasta
}
Main {
//Itse koodifunkkari
Loop (5) // Loopataan 5 kertaa eli kutsutaan alifunktioita Chapter1 - Chapter5
//Käytämme kuitenkin vain yhtä niistä laitettu 5 esimerkin vuoksi
Chapter1 (
//Haluamme liikuttaa objektia niin kauan että x
If, *pena.posX >=, $riit, If1, If1e; // Jos pena objektin x arvo on riit tai suurempi niin kutsutaan If1 alialifunktiota muussatapauksessa If1e
If1 [
Call, OmaFunktio; //Kutsutaan alifunktiota nimeltä OmaFunktio
break; //Lopetetaan looppi
]
If1e [
Mov, pena, 5, 0; //Liikutetaan penan X akselissa 5 eteenpäin
]
)
OmaFunktio (
Var, nimi, string; //Nimi muuttuja
printf, Loppu hyvin kaikki hyvin; //Printataan konsoliin tekstiä
Get, Input:Anna nimesi:Nimi?, nimi; //Pyydetään käyttäjältä nimeä ja tallennetaan se nimi muuttujaan
printf, Terveppä terve $nimi; //Moikataan käyttäjää
)
}Ja muuttujaympäristön haluaisin tuollatavalla toteutettua
InStr:ä käytetään arvoilla mistä lähdetään, merkkijono, mitä etsitään, eli muuta...
fPos = InStr(Av(X), "=") 'muotoon fPos = InStr(1, Av(X), "=") 'voit jättää ykkösen poiskin, mutta pilkku pitää löytyä
"Kauneusvirheenä" korjaisisin myös...
Final = Final & Mid(Av(X), 1, fPos - 1) & ":" 'muotoon If LenB(Final) > 0 Then Final = Final & ":" 'LenB() vastaa = "", mutta on nopeampi suorittaa Final = Final & Mid(Av(X), 1, fPos - 1) 'näin : on aina kahden arvon välissä jakajana
Tuolla korjauksella splitattaessa GetAllVars:n palauttamia arvoja ReplaceVars:ssa, ei splitissä ole yhtä tyhjää arvoa lopussa. Kuten sanoin, kauneusvirhe...
Olen kyllä aina käyttänyt instr tällätavalla
InStr(merkkijono,"haettavamerkki")
Ja hyvin on toiminut
Aihe on jo aika vanha, joten et voi enää vastata siihen.