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 :

Procédure de passage en majuscules, problème


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut Procédure de passage en majuscules, problème
    Bonjour à tous,
    j'ai un problème dans la réalisation d'une procédure pour passer un texte contenu dans un fichier en majuscules.
    Par exemple, j'ai "coucou, comment ça va?" et je dois renvoyer "COUCOU, COMMENT CA VA?".
    Ma procédure lit bien le texte dans le fichier et le réécrit bien dans un second mais ne fait pas le passage en majuscules.
    Où est le problème?
    Voici ma procédure et le programme principal :
    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
    type Fichier = file of char;
     
    var f: Fichier;
     
    procedure Majuscule( var f: Fichier );
    var c : char;
         n : integer;
         g : Fichier;
    begin
      reset(f);
      Assign(g,'c:\tp7\projet\Mtest.txt');
      rewrite(g);
      c:='Z';
      n:=0;
      read(f,c);
     
      while not eof(f) do
     
      begin
     
       n := ord(c);
     
       if ( (97 <= n) and (n >= 122) ) then
          c:= chr(n-32);
          else if ( (n = 128) or (n = 135) ) then c:= 'C'
               else if ( (n = 129) or (n = 150) or (n = 151) or (n = 154) or (n = 163)) 
                        then c:='U'
                    else if ( (n = 130) or (n = 136) or (n = 137) or (n = 138)
                             or (n = 144) ) then c:='E'
                         else if ( (n = 131) or (n = 132) or (n = 133) or (n = 134) 
                                  or (n = 142) or (n = 143) or (n = 160) ) then c:='A'
                               else if ( (n = 139) or (n = 140) or (n = 141) or (n = 161) )                            
                                       then c:='I'
                                    else if ( (n = 147) or (n = 148) or (n = 149)
                                            or (n = 153) or (n = 162) ) then c:='O'
                                         else if ( (n = 164) or (n = 165) ) then c:='N';
     
      write(g,c);
      read(f,c);
     
      end;
     
      close(f);
      close(g);
     
     
    end;
     
    var f1, f2 : Fichier;
          c : integer;
          n : char;
    begin
     
     Assign(f1,'c:\tp7\projet\test.txt');
     
     Majuscule(f1);
     
     writeln('fini');
     
    end.
    Merci beaucoup de votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2007
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 256
    Par défaut
    bonsoir votre n dans la fonction il snignifie quoi ?

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Bizarre, ça me semble pourtant correct, à l'exception qu'il faut lire dans le fichier au début de la boucle et non à la fin, sinon tu perds le dernier caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while not eof(f) do
    read(f,c);
    { ton traitement }
    end;
    Il est aussi inutile d'initialiser "c" et "n" vu que tu leur affectes de toute façon une valeur avant usage.

    Sinon il existe la fonction upcase qui te permet de transformer une chaine de caractère à son équivalent en majuscules (sans compter les caractères accentués ou spéciaux par contre).

    PS :
    utilise de balises [ CODE ] [ /CODE ] (sans les espaces) pour ton code source, ce sera plus facile à lire pour nous et tu n'auras pas à t'embetter avec la mise en forme.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    Donc, n (qui est un entier ) on lui affecte la valeur du code ascii du caractère de la variable c (qui est lu dans le fichier f).

    Oui j'avais remarqué que je perdais le dernier caractère de mon fichier, je vais modifier ça.
    Mais je ne vois pas du tout pourquoi ça ne veut toujours pas fonctionner.^^
    Merci de vos réponses.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    bon alors, j'ai refait le code en utilisant un case..of, bien plus lisible que la cascades de if.
    Maintenant j'obtient bien les majuscules lorsuqe ce sont des minuscules, par contre cela ne passe pas quand ce sont des caractères avec des accents.

    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
    type Fichier = file of char;
     
    var f: Fichier;
     
    procedure Majuscule( var f: Fichier );
     
    var c : char;
        g : Fichier;
        n : integer;
     
    begin
     
      reset(f);
      Assign(g,'c:\tp7\projet\Mtest.txt');
      rewrite(g);
     
      while not eof(f) do
     
      begin
     
       read(f,c);
       n:= ord(c);
     
        Case n of
            97..122 : c:=chr(n-32);
            131,132,133,134,142,143,160 : c:='A';
            130,136,137,138,144 : c:='E';
            139,140,141,161 : c:='I';
            147,148,149,153,162 : c:='O';
            129,150,151,154,163 : c:='U';
            152 : c:='Y';
            128,135 : c:='C';
        end;
     
      write(g,c);
     
     
      end;
     
      close(f);
      close(g);
     
     
    end;
     
    var f1, f2 : Fichier;
        c : integer;
        n : char;
    begin
     
     Assign(f1,'c:\tp7\projet\test.txt');
     
     Majuscule(f1);
     
     writeln('fini');
     
     
    end.

    si quelqu'un peut m'aider, se serait génial.
    merci d'avance

  6. #6
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    tsss c'est pas logique tout ça, pour moi ça devrait fonctionner !

    Sinon j'ai trouvé ce qui n'allait pas dans ton premier code : c'était ta condition qui était fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (97 <= n) and (n >= 122) ) then ... {c'est n <= 122 qu'il faut mettre}
    Sinon voici le code pour cette même fonction posté dans ce post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        case ord(c) of
          128,135 : c:='C';
          129,150,151,154,163 : c:='U';
          130,136,137,138,144 : c:='E';
          131,132,133,134,142,143,160 : c:='A';
          139,140,141,161 : c:='I';
          147,148,149,153,162,226 : c:='O';
          164,165: c:='N';
        else c:= UpCase(c);
        end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2006, 14h38
  2. Procédure stockée, passage de paramètres
    Par kanon90 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 30/08/2006, 14h40
  3. Procédure stockée : passage d'un tableau en paramètres
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/05/2006, 14h52
  4. Passage de paramètres: problèmes
    Par claralavraie dans le forum ASP
    Réponses: 4
    Dernier message: 07/02/2006, 13h50
  5. Réponses: 2
    Dernier message: 15/09/2004, 18h17

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