2017-06-05 1 views
3

Je suis nouveau à Prolog mais je reçois les bases. J'ai des problèmes pour lire un fichier. Voici mon fichier:Swi Prolog, Lire des exemples de fichiers

16 
78 45 12 32 457 97 12 5 731 2 4 55 44 11 999 7 

Je veux le lire pour que je récupère les caractères sous forme de nombres. La première ligne est la quantité de chiffres sur la ligne 2. Les problèmes sont les suivants:

1) Comment les diviser sur l'espace ou le caractère NOUVEAU EN LIGNE

2) Ils doivent être des nombres: 32, pas de chaînes: « 32 "

J'utilise SWI-Prolog.

+0

https://stackoverflow.com/questions/4805601/read-a-file-line-by-line-in- prolog – tso

+2

J'ai vu ce post et ça n'aide pas. la première réponse renvoie des codes de caractères mais je veux des chiffres. L'autre me donne une erreur. J'ai besoin du numéro disponible dans une liste ou quelque chose pour que je puisse les traiter plus tard –

Répondre

3

Voici mon implémentation:

my_read_file(File,Firt_Number ,List):- 
    open(File, read, Stream), 
    read_line(Stream, [Firt_Number]), 
    read_line(Stream, List), 
    close(Stream). 

read_line(Stream, List) :- 
    read_line_to_codes(Stream, Line), 
    atom_codes(A, Line), 
    atomic_list_concat(As, ' ', A), 
    maplist(atom_number, As, List). 

Exemple:

?- my_read_file("file.txt",N,L). 
N = 16, 
L = [78, 45, 12, 32, 457, 97, 12, 5, 731, 2, 4, 55, 44, 11, 999, 7] .