IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Construire deux fichiers à partir d'un seul


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Construire deux fichiers à partir d'un seul
    Bonjour,

    Je sollicite votre un aide pour un exercice de clisp qui me pose problème.

    J'ai un fichier contenant les principaux caractères utilisés en français : ici

    Dans le fichier, il y a sur chaque ligne, un numéro, un caractère et sa représentation lisp.

    Je dois coder une fonction (en clisp of course) qui écrit dans un fichier alpha-char les caractères de chaque ligne, et dans un fichier alpha-code les codes des caractères.

    En gros je dois avoir ça :

    Alphabet.txt :
    65 A #\A
    66 B #\B
    67 C #\C

    alpha_char.txt :
    A
    B
    C

    alpha_code.txt :
    #\A
    #\B
    #\C

    J'ai beaucoup de mal avec ce langage et mon cours est très mal documenté.
    Voici donc ce que j'ai pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (defun splitalpha (monfichier)
      (setq monfichier (open monfichier :direction :input :if-does-not-exist :error) )
      (loop
        (cond
          ((???) (close monfichier) (return)) )
        (read-from-string (read-line monfichier nil nil))
    En pensant que ça pourrait m'aider j'ai créer une fonction qui fait le travail attendu en Python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ## sépare code et char dans 2 fichiers ##
    def splitalpha(fichier, char=[], code=[]):
            flux = open(fichier, 'r')
            for n, line in enumerate(flux):
                    char.append(line.split()[1])
                    code.append(line.split()[2])
            flux.close()
            flux = open("alpha_char.txt", 'w')
            flux.write('\n'.join(char))
            flux.close()
            flux = open("alpha_code.txt", 'w')
            flux.write('\n'.join(code))
            flux.close()
    Si quelqu'un peut m'aider à avancer je ne dirais pas non car ce n'est que le début de l'exercice et je bloque déjà. C'est un langage avec lequel je n'arrive pas me familiariser.

    Merci d'avance !!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour,

    Citation Envoyé par MilkyMars Voir le message
    J'ai un fichier contenant les principaux caractères utilisés en français : ici

    Dans le fichier, il y a sur chaque ligne, un numéro, un caractère et sa représentation lisp.
    Séparés par des tabulations?

    Je dois coder une fonction (en clisp of course) qui écrit dans un fichier alpha-char les caractères de chaque ligne, et dans un fichier alpha-code les codes des caractères.

    En gros je dois avoir ça :

    Alphabet.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    65	A	#\A
    66	B	#\B
    67	C	#\C
    alpha_char.txt :
    alpha_code.txt :
    J'ai beaucoup de mal avec ce langage et mon cours est très mal documenté.
    J'espère que tu as accès à internet!

    Voici donc ce que j'ai pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (defun splitalpha (monfichier)
      (setq monfichier (open monfichier :direction :input :if-does-not-exist :error) )
      (loop
        (cond
          ((???) (close monfichier) (return)) )
        (read-from-string (read-line monfichier nil nil))
    Bon début!
    Il reste à trouver comment lire un fichier ligne à ligne et terminer sur la fin de fichier (chercher sur internet).
    Comment ouvrir les flux sur les 2 fichiers de sortie.
    Après utilisation de read-line (pour lire une ligne du fichier), on peut découper la ligne en 3 morceaux (sous-chaines), par exemple, en s'inspirant de la fonction suivante (en remplaçant le séparateur espace par tabulation (si c'est bien le cas)):

    http://cl-cookbook.sourceforge.net/strings.html
    (trouvé avec google "clisp+string+manipulating")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (defun split-by-one-space (string)
        "Returns a list of substrings of string
    divided by ONE space each.
    Note: Two consecutive spaces will be seen as
    if there were an empty string between them."
        (loop for i = 0 then (1+ j)
              as j = (position #\Space string :start i)
              collect (subseq string i j)
              while j))

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Alors oui les numéros, caractères et codes sont séparés par des tabulations dans le fichier texte.

    Oui j'ai déjà fait pas mal de recherche sur le net, et c'est aussi pour ça que je demande de l'aide sur ce forum. J'ai imprimé quelques cours pour avoir au moins les bases. Et je me cherche dans le documentations pour trouver ce dont j'ai besoin.

    J'étudie à distance car je travaille en parallèle, du coup je ne peux pas trouver l'aide au près des profs... Et du coup là je ne suis pas chez moi donc je regarde tout ça ce soir et je tacherais de me documenter sur les fonctions de lecture/écriture. J'imagine que comme en Python il faut fermer le ficher dans lequel on lit ou écrit avant de lire / écrire dans un autre donc si c'est le cas je vais devoir créer des variables locales à la fonction pour stocker provisoirement ce que j'écrirais par la suite dans les fichiers texte.

    Merci encore pour ta réponse !!

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par MilkyMars Voir le message
    J'imagine que comme en Python il faut fermer le ficher dans lequel on lit ou écrit avant de lire / écrire dans un autre
    euh... je ne le jurerais pas...
    Je n'ai pas le temps de regarder la doc maintenant mais je suis sûr qu'en Le_Lisp, on pouvait ouvrir un certain nombre (12, de mémoire) de file descriptors en même temps et qu'on pouvait lire ou écrire sans refermer à chaque fois.
    Je ne serais pas surpris qu'en Clisp, ce soit la même chose... surtout si ton exemple avec l'appel de "open" est correct!

    donc si c'est le cas je vais devoir créer des variables locales à la fonction pour stocker provisoirement ce que j'écrirais par la suite dans les fichiers texte.
    Sinon effectivement on pourrait toujours stocker les 2 résultats dans des variables et imprimer leur contenu une fois le traitement terminé.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup, grâce à ton aide je suis parvenu à faire cette fonction.

    Encore merci !!

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Ce serait sympa de publier ta solution pour d'éventuels lecteurs qui seraient confrontés au même problème!

Discussions similaires

  1. fusionner deux fichiers .exe en un seul
    Par splifo dans le forum Windows
    Réponses: 10
    Dernier message: 03/05/2012, 03h59
  2. Création de plusieurs fichier à partir d'une seule requête
    Par V i n c e n t dans le forum Cognos
    Réponses: 5
    Dernier message: 30/06/2011, 11h14
  3. [XSLT] Transformer deux fichiers XML avec un seul Stylesheet
    Par sylvie dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/08/2010, 15h23
  4. peut on faire deux actions à partir d'une seule form
    Par sniper_marra dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2008, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo