Jump to content

Nueva Funcion: write_or_read


PACI

Mensajes recomendados

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()	endend
Saludos ^^
Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...