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

Pascal Discussion :

Traitement des chaînes de caractères


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Gabon

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 28
    Points : 6
    Points
    6
    Par défaut Traitement des chaînes de caractères
    Bonjour à tous,

    J'aimerais savoir où je pourrais avoir des codes sources Pascal sur la manipulation des fichiers. J'en ai écrit un peu, mais je bloque sur une erreur qui m'est inconnue : il s'agit de "error runtime 216". Quelqu'un pourrait-il m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    type liste=^chaine;
         chaine=record
                suivant:liste;
                caracter:char
                end;
     
    function long(l:liste):integer;
    var l1:liste;
        conteur:integer;
    begin
       l1:=l;
       conteur:=0;
       while l1<>nil do
       begin
          inc(conteur);
         l1:=l1^.suivant
       end;
       long:=conteur
    end;
     
    procedure ajoute(var l:liste;valeur:char);
    var l1,vale:liste;
        l0:integer;
    begin
       new(vale);
       vale^.caracter:=valeur;
       vale^.suivant:=nil;
       if l=nil then
         l:=vale
       else
       begin
          while l1^.suivant<>nil do
             l1:=l1^.suivant;
          l1^.suivant:=vale
       end
    end;
     
    procedure ajouter(var list:liste; valeur:char);
    var
      p:liste;
    begin
      new(p);
      p^.caracter:=valeur;
      p^.suivant := list;
      list:= p;
    end;
     
    procedure inverse(var l:liste);
    var
       l1,tete,p:liste;
    begin
       l1:=l;
       tete:=nil;
       while l1<>nil do
       begin
         new(p);
         p^.caracter:=l1^.caracter;
         l1:=l1^.suivant;
         p^.suivant:=tete;
         tete:=p
       end;
       l:=tete
    end;
     
    procedure conversion(chain:string;var l:liste);
    var
      i:integer;
    begin
       for i:=1 to length(chain)do
          ajouter(l,chain[i]);
       inverse(l)
    end;
     
    procedure imprime(l:liste);
    var
      l1:liste;
    begin
       l1:=l; 
       while l1<>nil do
       begin
          write(l1^.caracter);
         l1:=l1^.suivant
       end
    end;
     
    function rechercheligne(var t:text;ligne:integer):boolean;
    var num:integer;
        chemin:string;
        trouver:boolean;
    begin
       write('Veuillez entrer le chemin d''accès au fichier: ');
       readln(chemin);
       {$i-}
       assign(t,chemin);
       {$i+}
       while ioresult<>0 do
       begin
         writeln('Erreur chemin d''accès ou fichier inexistant; Veuillez recommencer');
         write('Veuillez entrer le chemin d''accès au fichier : ');
         readln(chemin);
        {$i-}
        assign(t,chemin);
        {$i+}
       end;
       reset(t);
       trouver:=false;
       num:=1;
      while not(eof(t)) and (num<>ligne) do
      begin
         readln(t);
         inc(num)
      end;
      if num=ligne then
         trouver:=true;
      rechercheligne:=trouver;
    end;
     
    procedure lire_ligne(var t:text;ligne:integer;var v:liste);
    var valigne:string;
    begin
       if rechercheligne(t,ligne)=true then
       begin
          while not(eoln(t))do
             read(t,valigne);
         conversion(valigne,v);
       end
       else
         writeln('Le fichier ne contient pas cette ligne.')
    end;
     
    var valeur:liste;
        t:text;
        ligne:integer;
        ligneliste:liste;
    begin
       write('Quelle ligne voulez-vous lire : ');
       readln(ligne);
       lire_ligne(t,ligne,valeur);
       imprime(valeur);
       writeln(long(valeur))
    end.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Bonjour,

    Je ne lis pas un code mal présenté
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    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 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Il s'agit vraisemblablement d'un pointeur non ou mal assigné : http://pascal.developpez.com/faq/?pa...otection-fault.
    À quel endroit l'erreur se produit-elle ? J'ai exécuté le programme sans la rencontrer. En passant, j'ai vu que le fichier ouvert n'était pas refermé.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Gabon

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    l'erreur se produit avec la fonction ajoute. je voulais m'en servir pour enregistrer caractere par caractere les lignes d'un texte. la liste prend bien le premier caractere mais quand elle arrive dans la boucle elle produit une erreur runtime 216, un constat que j'ai fai elle ne se produit que lorsque les caracteres proviennent d'un texte.
    merci d'avance pour toutes forme d'aide ou d'explication qui pourrait mettre d'une quelconque utilite et d'avancer dans mon exercices.

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    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 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Dans cette boucle de la procédure ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
         while l1^.suivant<>nil do
            l1:=l1^.suivant;
         l1^.suivant:=vale
      end
    La variable l1 n'a été initialisée nulle part.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Gabon

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

    Informations forums :
    Inscription : Décembre 2015
    Messages : 28
    Points : 6
    Points
    6
    Par défaut
    tu as raison j'ai mal initialise mon pointeur sa passe maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    begin
    new(vale);
    vale^.caracter:=t;
    vale^.suivant:=nil;
    if ch=nil then
    ch:=vale
    else
    begin
    ch1:=ch;{l'initialisation se fait ici}
    while ch1^.suivant<>nil do
    ch1:=ch1^.suivant;
    ch1^.suivant:=vale;
    end;
    end;
    merci infiniment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 06/09/2012, 12h34
  2. [debutant][traitement de chaine de caractere]
    Par hash92 dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2005, 16h53
  3. fonctions de traitements de chaines de caracteres
    Par jerem001_5 dans le forum C
    Réponses: 19
    Dernier message: 24/11/2005, 21h47
  4. Cherche fonction de traitement de chaine de caractere
    Par DeezerD dans le forum Langage
    Réponses: 1
    Dernier message: 10/09/2005, 15h41
  5. [langage] Compter des chaines de caractères
    Par julfra dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2004, 18h42

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