Cómo encontrar una palabra desde el final del archivo en Lua
Frecuentes
Visto 1,449 veces
0
Ok, uso el método de aquí: ¿Cómo leer solo la última línea de un archivo de texto en Lua?
El problema es que a veces la línea puede ser más grande.
La pregunta es ¿cómo puedo encontrar la primera palabra "foo" desde el final del archivo y luego usar todo lo que sigue?
2 Respuestas
1
El problema es que a veces la línea puede ser más grande.
Entonces solo necesitas buscar más atrás desde el final.
La pregunta es ¿cómo puedo encontrar la primera palabra "foo" desde el final del archivo y luego usar todo lo que sigue?
Tome una parte lo suficientemente grande del archivo para asegurarse de que tiene el último foo, el uso .*foo
para omitir todo hasta el último "foo" incluido (.* es codicioso).
local f = io.open('filename', 'r')
f:seek('end', -1024)
local text = f:read('*a')
local after = string.match(text, ".*foo(.*)")
f:close()
contestado el 22 de mayo de 12 a las 20:05
0
Si el archivo no es demasiado grande y está listo para tomar el camino más fácil, esto podría ayudar:
fh=io.open('myfile.txt','rb')
str=fh:read'*a'
pat='foo'
afterFoo=str:match('.*'..pat..'(.*)$')
fh:close()
Si necesita una solución más compleja, pero más rápida (en tiempo de ejecución en archivos grandes), supongo que leerá el archivo en fragmentos, invertirá cada uno de ellos y buscará su patrón al revés. No olvide buscar su patrón a lo largo de los bordes (los fragmentos deben superponerse al menos a la longitud del patrón que está buscando en el caso general).
Para obtener más explicaciones sobre la lectura del bloque, consulte mi publicación. aquí.
contestado el 23 de mayo de 17 a las 13:05
Gracias también, mi archivo puede ser muy grande (estoy analizando un registro). - totalmente atascado
Dado que ya está utilizando una expresión regular, no es necesario invertir nada. Solo usa .*PATTERN
para omitir todo hasta e incluyendo la última aparición de PATTERN
. - Barro
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas file lua or haz tu propia pregunta.
Muchas gracias, esto ayudó mucho. - totalmente atascado