Me gustaría leer un archivo de texto sin formato y aplicar un predicado a cada línea (los predicados contienen write
que hace la salida). ¿Como podría hacerlo?Leer un archivo línea por línea en Prolog
14
A
Respuesta
13
En SWI-Prolog, la solución más limpia es escribir un DCG que describa qué es una "línea" y luego llamar a un predicado para cada línea. Use la biblioteca (pio) para aplicar el DCG a un archivo.
EDITAR: Conforme a lo solicitado, tenga en cuenta: el uso
:- use_module(library(pio)).
lines([]) --> call(eos), !.
lines([Line|Lines]) --> line(Line), lines(Lines).
eos([], []).
line([]) --> ("\n" ; call(eos)), !.
line([L|Ls]) --> [L], line(Ls).
muestra: ?- phrase_from_file(lines(Ls), 'your_file.txt').
14
Usted puede utilizar read
para leer la corriente. Recuerde invocar at_end_of_stream
para asegurar que no haya errores de sintaxis.
Ejemplo:
readFile.pl
main :-
open('myFile.txt', read, Str),
read_file(Str,Lines),
close(Str),
write(Lines), nl.
read_file(Stream,[]) :-
at_end_of_stream(Stream).
read_file(Stream,[X|L]) :-
\+ at_end_of_stream(Stream),
read(Stream,X),
read_file(Stream,L).
miArchivo.txt
'line 0'.
'line 1'.
'line 2'.
'line 3'.
'line 4'.
'line 5'.
'line 6'.
'line 7'.
'line 8'.
'line 9'.
Así invocando main
va a recibir la salida:
?- main.
[line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9]
true
Simplemente configure main
. La salida aquí es un ejemplo usando write
, por supuesto. Configure para que coincida con su solicitud.
Supongo que este principio se puede aplicar para responder a su pregunta. Buena suerte.
Cuestiones relacionadas
- 1. Leer un archivo de texto línea por línea en Qt
- 2. ¿Cómo leer un archivo .gz línea por línea en C++?
- 3. Perl leer línea por línea
- 4. phantomjs javascript leer un archivo local línea por línea
- 5. Leer un archivo línea por línea hacia atrás usando fseek
- 6. Leer/Analizar archivo de texto línea por línea en VBA
- 7. ¿Cómo leer línea por línea en archivo pdf usando PyPdf?
- 8. Leer cadena línea por línea
- 9. Rendimiento al leer un archivo línea por línea vs leer todo el archivo
- 10. sincronización nodejs leer archivo grande línea por línea?
- 11. Lea un archivo línea por línea
- 12. ¿Cómo leer desde un child_process línea por línea en Node.js?
- 13. R - Leer STDIN línea por línea
- 14. Cómo leer archivos CSV línea por línea en VBScript
- 15. Leer en archivo de texto línea por línea php - no se detectó nueva línea
- 16. leyendo un archivo de texto en R línea por línea
- 17. Leer línea por línea en escritura del golpe
- 18. Cómo leer línea por línea desde un área de texto
- 19. Leyendo un archivo de texto en MATLAB línea por línea
- 20. C++ Leer archivo línea por línea y luego dividir cada línea usando el delimitador
- 21. La lectura de un archivo línea por línea en C#
- 22. ¿Cómo leer datos de NSFileHandle línea por línea?
- 23. Leer dos archivos de texto línea por línea simultáneamente -python
- 24. ¿Cómo leo un archivo gzip línea por línea?
- 25. unistd.h función de lectura(): ¿cómo leer un archivo línea por línea?
- 26. ¿Cómo leer datos línea por línea desde un archivo usando el script ant?
- 27. La forma más rápida para leer un archivo línea por línea con 2 juegos de cuerdas en cada línea?
- 28. Forma más rápida de leer el archivo de texto línea por línea en Java
- 29. Leer una cadena línea por línea usando C++
- 30. Cómo leer un archivo (o stdin) línea por línea en Python no esperando la lectura del archivo completo
Sé que ha pasado mucho tiempo, pero estoy intentando este método y parece tomar un tiempo absurdamente largo. ¿Podría proporcionar un ejemplo de algún código de rendimiento utilizando DCG y la biblioteca (pio) que se leerá en un archivo por líneas? ¡Gracias! –
He agregado un ejemplo que espero funcione mejor para usted. – mat
¡Muchas gracias! Veo que mi error anterior era utilizar el ejemplo en la documentación de la biblioteca SWI-Prolog (pio) para mi modelo. Utiliza 'findall/3' para obtener todas las instancias de un cierto patrón, pero veo que solo usas un dcg que analiza todo el archivo. Por curiosidad, ¿por qué debemos usar 'call (eos)' en lugar de una regla dcg? –