PACI Posted December 26, 2013 Report Share Posted December 26, 2013 Hola. Bueno, ultimamente anduve trabajando mucho con la edición de archivos por quest, y decidi hacer una función que vamos, me reduce muchísimo el trabajo. La función es: write_or_read(path, file, act, text, line) Que sirve para escribir, reescribir y leer un archivo, o leer una línea especifica de un archivo. Notas: Ruta del archivo; Nombre del archivo; Acción; Texto; Línea. Las acciónes: Como os dije, esta función puede leer o escribir en un archivo, para eso en act se pone lo que se quiere que haga: - Para leer se puede usar: leer, read, l (L minusculo) u r. La Acción que queréis tomar hace influenciar a lo que tengáis que poner en text, si queréis leer el contenido de un archivo, obviamente no vais a colocar ahí ningun texto. Así que, la función de leer se divide en otras 3 funciones: -> Leer la primera línea; (line, linea, o l) -> Leer el archivo entero; (all, todo, o entero) -> Leer una línea específica*. (sline, lineas, o ls) -> sline = specific line; lineas = linea especifica. *Para leer una línea específica hay que colocar, como último argumento de la función el número de la línea que hay que leer. - Para escribir se puede usar 2 tipos: 1. sobreescribir, rewrite, s u re. 2. escribir, write, e, a+ Lo que hace cada uno es muy simple, el 1. hace que borre el contenido del archivo y escriba de nuevo el texto que habéis puesto. El 2. apenas lo adiciona. Nota: No se necesita el último argumento, line, para escribir. Otros: Para tener menos trabajo aún, hice que, si el directório o el archivo seleccionados no existan, se creen solos. Las tabulaciones en el texto se hacen donde siempre, en el botóncito que está encima del caps lock. Pero para hacer un cambio de línea, hay que escribir __enter__. Ejemplos: --> Escribiendo: quest ejemplo_escribiendo_1 begin state start begin when login begin write_or_read("/usr/home/game/share", "logins", "escribir", "Hola") -- Escribirá "Hola" en el archivo logins localizado en /usr/home/game/share end endend------------------------------------------------------------------------------------------------quest ejemplo_escribiendo_2 begin state start begin when login begin write_or_read("/usr/home/game/share", "logins", "sobreescribir", "Adiós") -- Borrará el contenido del archivo logins localizado en /usr/home/game/share y escribirá "Adiós" end endend------------------------------------------------------------------------------------------------quest ejemplo_escribiendo_3 begin state start begin when login begin write_or_read("/usr/home/game/share", "logins", "escribir", "Hola Adiós") -- Escribirá "Hola Adiós" en el archivo logins localizado en /usr/home/game/share end endend------------------------------------------------------------------------------------------------quest ejemplo_escribiendo_4 begin state start begin when login begin write_or_read("/usr/home/game/share", "logins", "sobreescribir", "Hola Adiós") -- Borrará el contenido del archivo logins situado en /usr/home/game/share y escribirá "Hola Adiós" end endend------------------------------------------------------------------------------------------------quest ejemplo_escribiendo_5 begin state start begin when login begin write_or_read("/usr/home/game/share", "logins", "sobreescribir", "Hola__enter__Adiós") -- Escribirá: -- "Hola -- Adiós" -- En el archivo logins localizado en /usr/home/game/share end endend --> Leyendo: quest ejemplo_leyendo_1 begin state start begin when login begin chat(write_or_read("/usr/home/game/share", "logins", "leer", "todo")) -- Leerá el archivo logins entero localizado /usr/home/game/share end endend------------------------------------------------------------------------------------------------quest ejemplo_leyendo_2 begin state start begin when login begin chat(write_or_read("/usr/home/game/share", "logins", "leer", "linea")) -- Leerá la primera línea del archivo logins localizado en /usr/home/game/share end endend------------------------------------------------------------------------------------------------quest ejemplo_leyendo_3 begin state start begin when login begin chat(write_or_read("/usr/home/game/share", "logins", "leer", "lineas", 4)) -- Leerá la línea 4 del archivo logins localizado en /usr/home/game/share end endend Y por fin, la función, que hay que colocarla en el questlib.lua: function write_or_read(path, file, act, text, line) local type_ if os.execute('cd '..path) ~= 0 then os.execute('mkdir '..path) elseif os.execute('[ -f '..path..'/'..file..' ] && echo "s" || echo "n"') == 'n' then os.execute('cd '..path..' && touch '..file) end if act == 'leer' or act == 'read' or act == 'l' or act == 'r' then type_ = 'r' elseif act == 'sobreescribir' or act == 'rewrite' or act == 's' or act == 're' then type_ = 'w' elseif act == 'escribir' or act == 'write' or act == 'e' or act == 'a+' then type_ = 'a+' end local f = io.open(path..'/'..file, type_) if type_ == 'r' then if text == 'all' or text == 'todo' or text == 'entero' then return f:read('*all') elseif text == 'line' or text == 'linea' or text == 'l' then return f:read('*l') elseif text == 'sline' or text == 'lineas' or text == 'ls' then local ltable = {} for i in f:lines() do table.insert(ltable, i) end f:close() return ltable[line] end elseif type_ == 'a+' or type_ == 'w' then if string.find(text, '__enter__') ~= 0 then f:write(string.gsub(text, '__enter__', 'n', string.find(text,'__enter__'))..'n') else f:write(text..'n') end f:close() endendSaludos yagokurt, Miguelito, Rafa23Alzira and 1 other 4 Quote Link to comment Share on other sites More sharing options...
Rinnegan Posted December 26, 2013 Report Share Posted December 26, 2013 Muy útil gracias. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.