[LUA 5] string uitlezen en tekens vervangen

Pagina: 1
Acties:
  • 329 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
De titel geeft al aan wat ik wil bereiken.
De lijst met tekens wordt natuurlijk nog veel groter dan wat er nu staat.

dit heb ik geprobeerd, ik zat met het probleem dat ik een variabele niet kan aanroepen door 2 andere variabelen te combineren.
Ik denk dat dit komt door de verschillende soorten variabelen (string, integer)

het probleem is echter dat ik niet weet hoe ik bij LUA 5 dit moet veranderen.
In mijn volgende stukje code zou het volgende moeten gebeuren:
de string " A" word ingelezen > de spatie word eruit geveegd en vervangen met "20". Vervolgens word de overige invoer ("A") ingelezen en de "A" word vervangen door "21"

jammer genoeg werkt t niet :)

mijn code tot nog toe:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
invoer = " A"
tnummer = 20
teken20 = " "
teken21 = "A"

function omzetten()
  if (invoer ~= "")
  then
  omzet = strsub(invoer, 1, 1)
    if (omzet == ("teken"..tnummer))
    then display = display..tnummer
    invoer = strsub(invoer, 2)
    else
    tnummer = tnummer + 1
    end
  print (tnummer) -- (om te testen)
  print (display) -- (om te testen)
    if (tnummer < 21)
    then omzetten()
    end
  else
  result = 1
  end
end

omzetten();


het lijkt redelijk veel op C, daarom heb ik de syntax highlighting van die taal gebruikt.
"--" betekend dat alles wat daarna komt genegeerd word

[ Voor 12% gewijzigd door Arjan op 31-07-2003 13:29 ]

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:59
Creatief; een recursieve functie om tekens mee te vervangen; LUA kent ook een while en repeat statement hoor. Ook je indentation zal ik maar "creatief" noemen.

Om je echt te kunnen helpen moet ik een definitie van "jammer genoeg werkt t niet :)" hebben (zie ook de FAQ!), want ik heb natuurlijk geen zin om deze rommelige code in m'n hoofd te executeren in de hoop zo een van de fouten te vinden.

Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Soultaker schreef op 31 July 2003 @ 14:35:
Creatief; een recursieve functie om tekens mee te vervangen; LUA kent ook een while en repeat statement hoor. Ook je indentation zal ik maar "creatief" noemen.

Om je echt te kunnen helpen moet ik een definitie van "jammer genoeg werkt t niet :)" hebben (zie ook de FAQ!), want ik heb natuurlijk geen zin om deze rommelige code in m'n hoofd te executeren in de hoop zo een van de fouten te vinden.
Ik ben geen programeur, heb er nooit les in gehad en alles wat ik op 'papier' zet is zelf bedacht. Ik gebruik het gewoon te weinig om een taal helemaal van binnen en buiten te leren.

Verder vind ik geen goede hulp pagina voor LUA code en werkt de methode die ik heb geschreven in principe wel, ware het niet dat LUA niet in staat lijkt te zijn om

var1 = "bo"
var2 = "om"
boom == (var1..var2)

te herkennen. Ik ben dan ook op zoek naar een methode die dat gedeelte kan vervangen.

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:59
Atgast schreef op 31 July 2003 @ 15:17:
Ik ben geen programeur, heb er nooit les in gehad en alles wat ik op 'papier' zet is zelf bedacht. Ik gebruik het gewoon te weinig om een taal helemaal van binnen en buiten te leren.
Tja, als je in een bepaalde taal wilt programmeren, ontkom je er niet aan om die taal tot op zekere hoogte te leren. Als je al programmeerervaring hebt in andere scripttalen dan kan je nog wegkomen met wat reference documentatie en wat geklooi, maar als je (zoals je zegt) geen programmeur bent, kun je niet zomaar verwachten dat je kunt programmeren.
Verder vind ik geen goede hulp pagina voor LUA code en werkt de methode die ik heb geschreven in principe wel, ware het niet dat LUA niet in staat lijkt te zijn om

var1 = "bo"
var2 = "om"
boom == (var1..var2)

te herkennen. Ik ben dan ook op zoek naar een methode die dat gedeelte kan vervangen.
Wat bedoel je met "niet herkennen"? Wat zou het volgens jou moeten doen? Wat werkt er niet; krijg je foutmeldingen, of doet de code wat anders dan gedacht; en hoe dan precies?

Ik blijf dit soort vragen trouwens niet herhalen; ze staan allemaal prima omschreven in de FAQ over beleid. Als je dus wil dat ik (of anderen) je met je probleem helpen, kun je tenminste de moeite nemen om de nodige informatie eenvoudig beschikbaar te maken.

edit:
De lua-users WIKI bevat trouwens uitgebreide informatie en tutorials. Als je het idee hebt dat je informatie tekort komt (op basis van de officiële documentie kan ik me daar wat bij voorstellen) moet je daar maar eens kijken.

[ Voor 14% gewijzigd door Soultaker op 31-07-2003 16:40 ]


Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Ik heb zelf het idee dat ik alles wat je hebt gevraagd beantwoord heb, ik heb ook de FAQ doorgelezen zoals ik altijd doe zodra ik iets post in een voor mij onbekend sub-forum

Als je de code bekijkt dan zie je dat er geen foutmeldingen ontstaan, omdat de code in principe wel klopt.

Het enige wat gebeurt is dat uit dit voorbeeld:
Atgast schreef op 31 July 2003 @ 15:17:
var1 = "bo"
var2 = "om"
"boom" == (var1..var2)
niet geld voor LUA 5.
Hij ziet in het voorbeeld (var1..var2) NIET als "boom" :(
edit:
print(var1..var2) levert wel boom op, maar hij gebruikt t niet als variabele.


Ik krijg dus geen foutmeldingen, maar de code doet niet wat hij zou moeten doen.
Overigens is de code nu nog 'lelijker' dan normaal omdat ik de code pas ga opschonen nadat ik heb ontdekt dat een methode werkt. Dat is het nadeel van zon halve zelfstudie, het is trail and error.

Maar nogmaals, ik gebruik dit nu alleen om een VFD te kunnen aansturen, normaal gesproken kom ik niet direct in contact met scripting.

[ Voor 17% gewijzigd door Arjan op 31-07-2003 17:10 ]

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:59
Atgast schreef op 31 July 2003 @ 17:01:
Ik heb zelf het idee dat ik alles wat je hebt gevraagd beantwoord heb, ik heb ook de FAQ doorgelezen zoals ik altijd doe zodra ik iets post in een voor mij onbekend sub-forum
Nee ok, dan is het goed, maar ik heb nog steeds het gevoel dat ik allerlei nuttige informatie mis. Als je de FAQ/QuickStart gelezen hebt, dan ligt het iig niet daaraan.
Als je de code bekijkt dan zie je dat er geen foutmeldingen ontstaan, omdat de code in principe wel klopt.
Maar wat gaat er dan mis? Wat verwacht je dat er gebeurt en wat gebeurt er in plaats daarvan?
Het enige wat gebeurt is dat uit dit voorbeeld:

niet geld voor LUA 5.
Hij ziet in het voorbeeld (var1..var2) NIET als "boom" :(
edit:
print(var1..var2) levert wel boom op, maar hij gebruikt t niet als variabele.
Dat kan ik niet onderschrijven:
code:
1
2
3
4
5
6
7
8
9
%lua
Lua 5.0  Copyright (C) 1994-2003 Tecgraf, PUC-Rio
> var1 = "bo"
> var2 = "om"
> print ("boom" == (var1..var2))
true
> print ("fiets" == (var1..var2))
false
>

Dat werkt bij mij dus gewoon foutloos. Wat bedoel je precies met "hij ziet het niet als variabele"?
Ik krijg dus geen foutmeldingen, maar de code doet niet wat hij zou moeten doen. Overigens is de code nu nog 'lelijker' dan normaal omdat ik de code pas ga opschonen nadat ik heb ontdekt dat een methode werkt. Dat is het nadeel van zon halve zelfstudie, het is trail and error.
Dat begrijp ik, maar het is voor mij wel handig om alleen de code te zien die relevant is voor het probleem. Het preciese probleem is me nog steeds niet helemaal duidelijk, trouwens.
Maar nogmaals, ik gebruik dit nu alleen om een VFD te kunnen aansturen, normaal gesproken kom ik niet direct in contact met scripting.
Dat is geen excuus; als je wilt programmeren, dan moet je het leren. Je kunt het ook niet willen leren, maar laat het dan iemand anders doen. Je kun in ieder geval niet hier aan komen zetten met "ik kan het probleem niet uitleggen want ik wil niets leren".

Het blijkt al dat het heel erg moeilijk is om je probleem duidelijk te maken als je geen preciese uitleg van je probleem kunt geven; waarschijnlijk komt dat doordat je niet goed thuis bent in de concepten en termen die bij programmeertalen horen. Het is dus zeker wel belangrijk om je er enigszins in te verdiepen.

Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
misschien dat het bij mij niet werkte omdat girder LUA een beetje heeft aangepast voor het programma. denkfout van mijn kant :)

Maar via de link die je mij gaf heb ik de functie "gsub" gevonden en dat is veel handiger aangezien dat precies is wat ik nodig heb :)

Het is niet zo dat ik de taal niet wil leren, maar ik krijg een beetje het "in het diepe gegooid worden" gevoel bij deze taal.
Van de meeste talen heeft wel iemand wat tutorials geschreven, het liefste nog toegepast voor een bep. applicatie.
Ik moet nu dus uitzoeken hoe girder omgaat met de scripts van LUA en ik moet uitvinden hoe LUA werkt. Best pittig, maar een leuke uitdaging ;)

[ Voor 5% gewijzigd door Arjan op 31-07-2003 18:14 ]

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Soultaker schreef op 31 July 2003 @ 17:20:
[...]

Dat werkt bij mij dus gewoon foutloos. Wat bedoel je precies met "hij ziet het niet als variabele"?
aangezien dit nog steeds een probleem vormt, ook bij gebruik van gsub, hoop ik dat iemand me hier bij kan helpen.

Wat ik bedoel:
C:
1
2
3
4
5
6
7
8
9
10
omzet = "boom"
t21 = "boom"
tnum = 21

if omzet == ("t"..tnum)
then print("winky!")
else print("bad, baaad monkey :(")
end

print("t"..tnum)

(melige foutcodes zijn een vereiste als je 'programeert' op mijn manier)

Deze code levert dus "winky!"
regel 10 laat dit ook zien, het resultaat van deze functie is namelijk "t21"

Het probleem zit em nu in het feit dat ik t21 als variabele wil gebruiken en niet als de string "t21"

maw: deze methode leverd
C:
1
if omzet == "t21")

en ik heb nodig
C:
1
if omzet == t21)


hoe zou ik dat kunnen bereiken?

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:59
Atgast schreef op 31 juli 2003 @ 18:34:
zaangezien dit nog steeds een probleem vormt, ook bij gebruik van gsub, hoop ik dat iemand me hier bij kan helpen.

Wat ik bedoel:
C:
1
2
3
4
5
6
7
8
9
10
omzet = "boom"
t21 = "boom"
tnum = 21

if omzet == ("t"..tnum)
then print("winky!")
else print("bad, baaad monkey :(")
end

print("t"..tnum)

Deze code levert dus "winky!"

regel 10 laat dit ook zien, het resultaat van deze functie is namelijk "t21"
Nee, de code levert "bad, baaad monkey :(" op, want "boom" is ongelijk aan "t21".
Het probleem zit em nu in het feit dat ik t21 als variabele wil gebruiken en niet als de string "t21"
Aha, nu snap ik je probleem. Je hebt er gewoon helemaal geen snars begrepen van het typesysteem van LUA en hebt geen flauw idee wat een table is. Ga alsjeblieft eerst een tutorial (of de reference manual) lezen, want op deze manier garandeer ik je dat je niets zult bereiken.

Je wilt zoiets doen:
Lua:
1
2
str = { 'f', 'o', 'o', 'b', 'a', 'r' }
print (str[4]) -- print 'b'

Maar dan moet je uiteraard wel weten dat tables bestaan, wat ze zijn, en hoe je ze kunt gebruiken. Ik ga je dat niet uitleggen, want op de Lua WIKI staat genoeg informatie, en /14 is niet bedoeld als inleiding in welke programmeertaal dan ook.

Als je een globaal idee hebt van hoe de taal werkt, is het sowieso verstandig om de documentatie van de standard libraries even door te bladeren, zodat je weet welke functionaliteit al aanwezig is. Het vervangen van substrings kan inderdaad al met een string-functie.

Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
als je gewoon had gezegd dat ik tabellen kon gebruiken had je me al enorm geholpen hoor ;)

Helemaal niet aan gedacht :)
Ik dreig alleen tegen een probleem aan te lopen op het moment dat ik mijn codes niet meer kan vastleggen in decimale codes. Eens zien hoever ik kom

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Arjan
  • Registratie: Juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
ok, het ziet ernaar uit dat het gelukt is :)

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input = reg1
character = {" ","A","B","C","D"}           -- etc
charcodes = {"020","021","022","023","024"} -- etc
count = 1
display = ""

repeat
omzet = strsub(input, 1, 1)
  if (omzet == character[count])
  then display = display..(charcodes[count]).." "
  input = strsub(input, 2)
  count = 1
  else
  count = count +1
  end
until input == ""

trailingspace = strlen(display)
display = strsub(display, 1, trailingspace-1)


Dit stukje code leest de input, kijkt welke code er bij het karakter hoort en vervangt deze.
Deze vervangen code kan dan via een plugin naar de VFD gestuurd worden.

Ik ben toch stiekem wel trots op dit stukje code, dat voor mijn doen ontzettend schoon is :)

ook hexadecimale codes zijn nu geen probleem meer, iets wat eerst niet kon (als de methode überhaupt al had gewerkt :P)

wij danken u voor alle hulp :7

[ Voor 19% gewijzigd door Arjan op 01-08-2003 01:23 ]

oprecht vertrouwen wordt nooit geschaad


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:59
Ah, leuk om te horen dat je er uit gekomen bent!
Pagina: 1