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

Langage Pascal Discussion :

[LG]chaine + fichier


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut [LG]chaine + fichier
    Salut.
    Voilà je lit un fichier texte pour en extraire 2 chaines séparées par un ';'.
    J'utilise pos pour trouver le ';' mais ensuite je souhaite séparer les deux chaines.
    La première continuera à alimenter mon menu.
    La deuxième sera stockée dans un tableau.

    Donc ma question est:
    Une fois que j'ai récupéré ma ligne comment séparer les deux chaines.

    Dans l'aide je n'ai trouvé que des exemples pour le mode protégé.

    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut vive le Copy()
    salut

    avec la commande copy tu pourra extraire une partie d'un string :
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    chainelue:=readln(fichier);
    posi:=pos(';', chainelue);
    chaine1:=copy(1, posi - 1, chainelue);
    chaine2:=copy(posi + 1, Length(chainelue) - posi);

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Euh la syntaxe est pas tout à fait correcte dans l'exemple de Denokan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var S:string;
    var chaine1,chaine2:string;
    var f:text;
    begin
    ...
    assign(f,'machin');
    rewrite(f);
    readln(F,s);
    chaine1:=Copy(S,1,pos(S,';')-1);
    chaine2:=Copy(S,pos(S,';')+1,length(S));
    end;
    Le fait de mettre length(S) dans le Copy du chaine2 copie la chaîne jusqu'au dernier caractère : pas besoin de calculer la longueur restante, il suffit de spécifier une valeur connue supérieure et le reste de la chaîne sera obligatoirement copiée !
    a+

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Ok, je teste ça et je revient.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Bon si j'ai bien compris le premier copy devrait me récupérer du premier caractère de s jusqu'au dernier avant le ';'.
    Sauf que ça m'affiche du vide.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Si je fait avec -1 ça ne me donne rien, par contre si je le remplace par +1 ça affiche la première lettre de ma chaine.
    Donc c'est au niveau du pos que ça coince.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    J'ai trouvé c'est pos(';',s) et non pas
    pos(s,';').

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Autant pour moi !

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Bon maintenant que j'ai récupéré mes deux chaines, une affichée et l'autre dans un tableau.
    Je voudrait pouvoir lancer celle qui se trouve dans mon tableau.
    Dans mon tableau il y a: c:\windows\notepad.exe.
    J'ai testé ceci:

    exec tabch[x]

    tabch étant mon tableau et x mon compteur.
    Sauf que TP ne veut pas de exec.

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Bon ca saoule l'histoire de exec : utilisez la fonction rechercher ici :
    http://www.developpez.net/forums/search.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    uses dos;
    begin
    exec('programme','ligne de commande');
    end.
    Une bonne fois pour toute ! Pascail tu pourrais peut-être mettre la solution définitive dans un post-it ??
    a+

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Pour info j'ai utilisé la fonction recherche.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Voilà je vient de tester:
    #13
    exec('','tabch[1]');
    Ca ne met plus d'erreur mais ça ne fait rien.
    Ou alors je me suis trompé pour le #13 qui n'est pas pour la touche entrée.
    Je vais quand même vérifier.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Apparement ce serait plutôt:
    exec('tabch[1]','');
    Mais ça ne marche toujour pas.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 46
    Points : 50
    Points
    50
    Par défaut chaine + fichier
    Pourquoi tu ne le fais pas tout simplement cela dans une boucle For par exemple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FOR x := debut_tabch TO fin_tabch DO
    WRITELN(tabch[x];
    debut_tabch étant l'indice de début de ton tableau et
    fin_tabch étant l'indice de fin de ton tableau

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Parce que ce qui est dans le tableau n'y est pas pour être affiché.
    Pour l'affichage de mon menu j'ai déjà une boucle qui fonctionne bien.

    J'ai aussi une boucle repeat pour la gestion du clavier qui fonctionne avec mes touches #72,#80.
    Donc reste le problème du exec.
    Par ex mon tabch[1] contient c:\windows\command\edit.com,
    donc en faisant exec ('tabch[1],'') ça devrait être bon nan ???

  16. #16
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 963
    Points : 59 654
    Points
    59 654
    Billets dans le blog
    2
    Par défaut
    Salut !

    Si tu exécutes
    ton programme va essayer de trouver (en vain) un programme tabch[1] pour l'exécuter.

    Par contre,
    ne passera la compilation que si ton tableau est bien composé de chaînes.

  17. #17
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Quand tu utilises des quotes '...', l'expression à l'intérieur des quotes est interprétée comme une chaîne de caractère. Or ici tu veux une variable pas une chaîne.
    Comme l'a dit Alcatîz, ton code va tenter d'exécuter le programme nommé tabch[1] ( il recherchera le programme dans le répertoire courant ). Si tu remplaces par exec(tabch[1],''); ton programme exécutera le programme dont le nom est contenu dans la variable tabch[1].
    a+

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Sachant que tabch[1] contient c:\windows\command\edit.com.(J'ai vérifié)
    Que j'ai modifié mon code en exec(tabch[1],'');
    Pourquoi ça ne marche pas.

    La touche enter est bien prise en compte, j'ai vérifié.

  19. #19
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il faut penser à réduire la taille de la mémoire avec la directive {$M} ( pour plus d'explications, regarde l'aide très très bien faite de TP )...
    Si ca marche toujours pas, utilise la variable DosError pour connaître le code d'erreur relatif à la dernière procédure.

    a+

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Points : 4
    Points
    4
    Par défaut
    Bon pour commencer si je lui met {$m $4000,0,0}
    le run ne m'affiche plus rien et ensuite il me dit que graph n'est pas initialisée.
    Il faut que je réouvre le fichier source pour revenir à la normale.

    Pour le doserror, je le déclare comme integer mais ensuite... ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2005, 16h18
  2. Modifier tout les fichier comportant une chaine
    Par narmataru dans le forum Linux
    Réponses: 10
    Dernier message: 28/09/2004, 16h58
  3. [langage] longueur d'une chaine lue ds un fichier
    Par perlaud dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 22h36
  4. Trouver un fichier contenant une chaine ?
    Par narmataru dans le forum Linux
    Réponses: 2
    Dernier message: 29/04/2004, 10h49
  5. chaines de caractères dans fichier .rc ou .res
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/03/2004, 15h19

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