contest_heisenberg_lua_long
von heisenberg- SNIPPET_DESC:
- Scripting Contest 08_2015 heisenberg / lua-lang
- SNIPPET_CREATION_TIME:
- 23.09.2015 22:48:36
- SNIPPET_PRUNE_TIME:
- Unendlich
- SNIPPET_TEXT:
-
- #!/usr/bin/env lua
- --
- -- LUA - der prozedurale Ansatz - erweitert auch als ein Einblick in
- -- die Methode der LUA-Iteratoren
- --
- -- Diese Variante kann mit beliebigen Datenmengen umgehen
- --
- -- Keine tr Funktion in lua. Also schnell mal eine schreiben...
- function tr(string,search,replace)
- local tmp = ""
- string:gsub("(.)", function(char)
- pos = search:find(char,1,true)
- tmp=tmp..(pos and replace:sub(pos,pos) or char)
- end)
- return(tmp)
- end
- -- Eine Iterator-Funktion, die uns zeichenweise den Text zurückliefert...
- function chars(text)
- local i = 0
- return function()
- i = i + 1
- if ( i <= text:len() ) then return text:sub(i,i) end
- end
- end
- -- Noch eine Iterator-Funktion, die uns jeweils einen Puffer voll Daten holt...
- -- Zeichenweise lesen sorgt bei grossen Datenmengen fuer sehr langsame
- -- Verarbeitungsgeschwindigkeit. Deswegen lieber einen grossen Schwung
- -- Daten lesen.
- function buffered_read(filename,buffer_size)
- local file = io.open(filename,"r")
- return function()
- buffer = file:read(buffer_size)
- if (buffer) then return buffer end
- file:close() end
- end
- function replace(buffer)
- local tmp=""
- for char in chars(buffer) do
- -- XOR: nur wenn " erkannt oder(exclusiv) in_quote auf true steht
- -- sind wir weiterhin in_quote
- in_quote=(char=='"' or in_quote) and (char~='"' or not in_quote)
- char=(( not in_quote ) and tr(char,"abeg","4836") or char)
- tmp=tmp..char
- end
- return tmp
- end
- -- *************** PROGRAMM STARTET HIER ********************
- for buffer in buffered_read("textfile.txt",10240) do
- io.stdout:write(replace(buffer))
- end
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN