Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C, VB6: Funktio ei toimi

tesmu [15.05.2006 20:10:50]

#

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 Function

Mistä johtuu että kun kutsutaan getallvars funktiota niin se ei palaudu enään sieltä vaan koodin suoritus lakkaa siihen replacevars funktiosta?

tesmu [16.05.2006 02:10:25]

#

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

BadSource [16.05.2006 07:15:05]

#

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...

tesmu [16.05.2006 14:13:10]

#

Olen kyllä aina käyttänyt instr tällätavalla

InStr(merkkijono,"haettavamerkki")

Ja hyvin on toiminut

Vastaus

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

Tietoa sivustosta