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

Affichage des résultats du sondage: utilité de ce genre de billet.

Votants
5. Vous ne pouvez pas participer à ce sondage.
  • utile

    4 80,00%
  • ça peut servir

    1 20,00%
  • sans intérêt

    0 0%
Free Pascal Discussion :

Programme qui supprime les espaces inutiles dans une chaîne


Sujet :

Free Pascal

  1. #1
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut Programme qui supprime les espaces inutiles dans une chaîne
    Bonjour,

    j'ai fait un petit programme pour supprimer les espaces dans une chaine
    un peu à la manière de =SUPPRESPACE(A1) d'un tableur.

    votre avis ? il y a plus simple ? c'est déjà implémenté dans le langage ?


    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
    // via joreveur 15/07/2012  version 0.1
    //Programme pour supprimer les espaces inutiles dans une chaine
    program Supprespace;
      uses crt;
      var space,chaine:string;
      i,flag:integer;
      const DeuxEpaces='  ';
    begin
      clrscr;
      writeln('Programme pour supprimer les espaces inutiles dans une chaine');
     
    //saisie de la chaine de départ
      flag:=0;
      while flag=0 do
      begin
    	write('entrer une chaine de caractères : ');
    	readln(chaine);
    	for i:=1 to length(chaine) do
    	begin
    	  if chaine[i]<>' ' then flag:=flag+1;
    	end;
      end;	
     
    //suppression des doubles espaces par un seul espace par recurcivité
      space:=DeuxEpaces;
      while space=DeuxEpaces do
      begin
    	for i:=length(chaine) downto 1 do
    	begin
    	  space:=copy(chaine,i,2);
    	  if space=DeuxEpaces then
    	  begin
    		chaine:=copy(chaine,1,i-1)+' '+copy(chaine,i+2,length(chaine)-1);
    	  end;
    	end;
      end;
     
    //suppression de l'espace de début et de fin si nécessaire.
      if chaine[1]=' ' then chaine:=copy(chaine,2,length(chaine)-1);
      if chaine[length(chaine)]=' ' then chaine:=copy(chaine,1,length(chaine)-1);
      writeln(chaine,' (longueur de : ',length(chaine),')');
      write('enter pour quitter');
      readln;
    end.
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    entrer une chaine de caractères :    La    jument   verte de Marcel  Aymé     
    La jument verte de Marcel Aymé (longueur de : 30)


    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Chouette, un exercice !

    Voici la solution que j'ai trouvée :

    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
     
    program essai;
     
    // Free Pascal 2.6
    // Suppression des espaces inutiles
     
    const
      maChaine: string = ' Line(0,  0, 10,   10); ';
     
    function f(s: string): string;
    var
      i: word;
      temp1: string;
      espace: boolean = true;
      temp2: string;
      dernier_espace: word = 1;
    begin
      //
      temp1 := '';
      //
      for i := 1 to length(s) do
      begin
        //
        if not ((s[i] = chr(32)) and espace) then
        begin
          temp1 := temp1 + s[i];
          //
          if s[i] = chr(32) then
            espace := true
          else
            espace := false;
          //
        end;
        //
        if s[i] = chr(32) then dernier_espace := i;
        //
      end;
      //
      temp2 := '';
      //
      for i := 1 to dernier_espace - 1 do temp2 := temp2 + temp1[i];
      //
      f := temp2;
    end;
     
    begin
      writeln('''' + maChaine + '''');
      writeln('''' + f(maChaine) + '''');
      readln;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    à vu de nez tu as un bug si la chaîne ne se termine pas par un espace
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    Bonjour,

    Citation Envoyé par Roland Chastain Voir le message
    Chouette, un exercice !

    Voici la solution que j'ai trouvée :
    merci de ton programme. J'envisageai de faire une fonction et tu as deja travaillé dans ce sens là.

    Citation Envoyé par Paul TOTH Voir le message
    à vu de nez tu as un bug si la chaîne ne se termine pas par un espace
    dans quel programme?

    à bientôt.

  5. #5
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Chouette, un exercice !

    Voici la solution que j'ai trouvée :
    un bug dans ton programme....
    exemple si je demande de travailler cette chaine
    'la jument verte'
    ça va me donner çà
    'la jument verteument
    '

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    FreePascal ne possède-t-il pas les fonction StringReplace et Trim de Delphi ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    J'ai pris mes rêves pour des réalités.

    Voici une nouvelle version qui paraît mieux fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      temp2 := '';
      //
      if (temp1 <> '') and (temp1[length(temp1)] = chr(32)) then
      begin
        for i := 1 to dernier_espace - (1 + length(s) - length(temp1)) do
        begin
          temp2 := temp2 + temp1[i];
        end;
      end else
      begin
        temp2 := temp1;
      end;
      //
      f := temp2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      writeln('''' + f('') + '''');                // ''
      writeln('''' + f(' ') + '''');               // ''
      writeln('''' + f('La jument verte') + ''''); // 'La jument verte'
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    FreePascal ne possède-t-il pas les fonction StringReplace et Trim de Delphi ?
    Elles existent, mais :
    1. StringReplace ne me semble pas vraiment adaptée au problème
    2. C'est plus drôle de le faire tout seul comme un grand


    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
    program SuprEsp;
    {$mode objfpc}{$h+}
     
    {$ifdef WINDOWS}
      {$APPTYPE CONSOLE}
    {$endif}
     
    function SupprEspace(const S: String) : String;
    var
      I, Len : Integer;
    begin
      Result := '';
      Len := Length(S);
      I := 1;
     
      while I <= Len do
      begin
     
        // Eliminer une suite d'espaces
        while (I <= Len) and (S[I] = ' ') do
          Inc(I);
     
        // Copier une séquence de caractères affichables
        while (I <= Len) do
        begin
          Result := Result + S[I];
          Inc(I);
     
          if S[I - 1] = ' ' then
            Break;
        end;
     
      end;
     
      // Eliminer l'espace de fin
      Len := Length(Result);
      if Len > 0 then
        if Result[Len] = ' ' then
          SetLength(Result, Len - 1);
    end;
     
    procedure Test(const S: String);
    begin
      WriteLn('SupprEspace(''', S, ''') => ''', SupprEspace(S), '''');
    end;
     
     
    begin
      Test('');
      Test(' ');
      Test('A');
      Test(' A');
      Test('A ');
      Test(' A ');
      Test('ABCD');
      Test('AB CD');
      Test(' AB CD ');
      Test('A B    C  D');
      Test(' A B    C  D    ');
      Test('  La    jument    verte de Marcel    Aymé    ');
      ReadLn;
    end.

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    @batyann811

    J'aime bien ton programme, surtout le Break. C'est bien pensé.

    Par contre j'ai remarqué que les caractères accentués ne sont pas rendus correctement. Cela tient au mode de compilation, n'est-ce pas ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    @batyann811
    Par contre j'ai remarqué que les caractères accentués ne sont pas rendus correctement. Cela tient au mode de compilation, n'est-ce pas ?
    C'est du à un problème d'encodage. Tu as du enregistrer ton fichier source dans un encodage différent de celui de la console. Si tu utilises Lazarus, par exemple, il a du encoder ton fichier en UTF-8. Sous linux, pas de problème car la console est aussi en UTF-8 (dans 99,99% des cas). Sous windows la console est en CP-847 (à vérifier c'est juste un souvenir) et le programme sort donc du texte UTF-8 sur un encodage différent ce qui donne des hyérogliphes. Normalement il y a 2 façons de corriger cela.

    La première est de faire concorder l'encodage du fichier source et de la console.

    La seconde est d'indiquer l'encodage dans le fichier source avec une directive {$CODEPAGE UTF8} pour que la RTL fasse la traduction automatiquement. Malheureusement, sous windows, ça ne fonctionne pas parce que la console et l'environnement graphique n'utilisent pas le même encodage.

  11. #11
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ca me parait un peu lourd vos méthodes (récursivité, 2 while)...

    Si j'ai bien compris, SupprEspace enlève les espaces en doubles, les espaces avant et après la chaine ?

    J'aurais vu un truc du genre :

    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
    function SupprEspace(Txt : string):String;
    var i : integer;
        Espace : boolean;
    begin
      Result:='';
      Espace=false;
     
      for i:=1 to Length(Txt) do
      begin
        if Txt[i]=' ' then Espace:=true
        else
        begin
          if Espace and (Result<>'') then Result:=Result+' '+Txt[i];
                                     else Result:=Result+Txt[i];
          Espace=false;
        end;
      end;
    end;
    (Non testé)

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Ca me parait un peu lourd vos méthodes (récursivité, 2 while)...
    A l'origine j'avais pensé faire comme toi. Et puis je me suis dit que différencier le traitement des zones blanches du traitement des zones imprimables (les 2 while) devrait rendre la fonction plus rapide.

    Je viens de tester. Et en fait non c'est même plus lent...

  13. #13
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Merci pour le retour.

    Il faut dire aussi que dans les zones "blanches", il n'y a qu'un test et une affectation, donc c'est assez rapide...

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    En trichant légèrement j'ai rendu ma méthode beaucoup plus rapide (environ 4 fois plus rapide que la méthode mick605 qui était déjà 15 à 20% plus rapide que ma pseudo méthode optimisée bidon) :

    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
     
    {--- SupprimerEspace ---}
    function SupprimerEspace(const S: String) : String;
    var
      I, Len, J : Integer;
    begin
      Result := '';
      Len := Length(S);
     
      if Len = 0 then
        Exit;
     
      SetLength(Result, Len);  // La "triche" est ici
     
      I := 1;
      J := 1;
      while I <= Len do
      begin
     
        // Eliminer une suite d'espaces
        while (I <= Len) and (S[I] = ' ') do
          Inc(I);
     
        // Copier une séquence de caractères affichables
        while (I <= Len) do
        begin
          Result[J] := S[I];
          Inc(I);
          Inc(J);
     
          if S[I - 1] = ' ' then
            Break;
        end;
     
      end;
     
      // Eliminer l'espace de fin
      if J > 1 then
        if Result[J - 1] = ' ' then
          Dec(J);
     
      SetLength(Result, J - 1);
    end;
    La même méthode en utilisant des pointeurs est même encore un peu plus rapide.

  15. #15
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    voici une autre idée

    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
     
    function XTrim(const Str: string): string;
    var
      Index      : Integer;
      IgnoreSpace: Boolean;
      AddSpace   : Boolean;
    begin
      IgnoreSpace := True; // au début on ignore les espaces
      AddSpace := False; // il ne faudra donc pas en insérer un
      Result := ''; // chaîne vide
      for Index := 1 to Length(Str) do
      begin
        if Str[Index] = ' ' then // un espace ?
        begin
          if IgnoreSpace then Continue; // doit-on les ignorer ?
          AddSpace := True; // il faudra en ajouter un (sauf en fin de chaîne)
          IgnoreSpace := True; // et ignorer les autres
        end else begin // sinon
          IgnoreSpace := False; // il faudra compter le prochain espace
          if AddSpace then // a-t-on rencontré au moins un espace ?
          begin
            Result := Result + ' '; // l'ajouter avant
            AddSpace := False; // une seule fois
          end;
          Result := Result + Str[Index]; // ajouter le caractère non espace
        end;
      end;
    end;
    et une version plus adaptée pour Delphi et ses chaînes "longues" (une seule allocation puis un ajustement de la taille)
    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
     
    function XTrim(const Str: string): string;
    var
      Index      : Integer;
      Offset     : Integer;
      IgnoreSpace: Boolean;
      AddSpace   : Boolean;
    begin
      IgnoreSpace := True;
      AddSpace := False;
      SetLength(Result, Length(Str));
      Offset := 0;
      for Index := 1 to Length(Str) do
      begin
        if Str[Index] = ' ' then
        begin
          if IgnoreSpace then Continue;
          AddSpace := True;
          IgnoreSpace := True;
        end else begin
          IgnoreSpace := False;
          if AddSpace then
          begin
            Inc(Offset);
            Result[Offset] := ' ';
            AddSpace := False;
          end;
          Inc(Offset);
          Result[Offset] := Str[Index];
        end;
      end;
      SetLength(Result, Offset);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  16. #16
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Alala, si vous trichez en plus !!

    En bidouillant avec les allocations

    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
    procedure SupprEspace(var Txt : string);
    var i, j : integer;
        Espace : boolean;
    begin
      j:=0;
      Espace=false;
     
      for i:=1 to Length(Txt) do
      begin
        if Txt[i]=' ' then Espace:=true
        else
        begin
          if Espace and (j<>0) then 
          begin
            Txt[j+1]=' ';
            Txt[j+2]=Txt[i];
            inc(j,2);
          end
          else
          begin
            inc(j);
            Txt[j]=Txt[i];
          end;
          Espace=false;
        end;
      end;
     
      Delete(Txt,j+1,MaxInt);  //Je sais jamais si c'est j ou j+1
    end;
    C'est faux, je n'ai pas transformé la fonction en procedure ... Personne a dit que c'était interdit

  17. #17
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    merci de tous vos avis et coding

    voila une nouvelle mouture ... peut-être à revoir ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function s2(a: string): string;
      var i:integer;
     
      begin
    	for i:=length(a) downto 2 do
    	  if (a[i]=' ') and (a[i-1]=' ') then  a:=copy(a,1,i-1)+copy(a,i+1,length(a)-1);
     
    	if (length(a)>1) and (a[length(a)]=' ') then delete(a,length(a),1);
    	if (length(a)>1) and (a[1]=' ') then delete(a,1,1);
     
    	s2:=a;
      end;

  18. #18
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Pourquoi ne pas faire tout simplement un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While St[1] = ' ' Do
      Delete(St, 1, 1);
    While St(Length(St))=' ' Do
      Delete(St, Length(St), 1);

  19. #19
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    1° parce que ça ne fonctionnerait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While St(Length(St))=' ' Do
    2° parce que, même si ça marchait, ça ne répondrait pas au problème, qui est de supprimer les espaces superflus partout dans la chaîne, et pas seulement aux extrémités.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. VBA_Supprimer les espaces superflus dans une chaîne de caractères
    Par Ma_Mariem dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/05/2013, 17h15
  2. Réponses: 1
    Dernier message: 17/05/2012, 15h52
  3. Supprimer les espaces consécutifs dans une chaîne
    Par aymenet1 dans le forum Pascal
    Réponses: 12
    Dernier message: 27/11/2007, 22h21
  4. Réponses: 3
    Dernier message: 26/03/2007, 09h46
  5. Supprimer les premiers 0 dans une chaîne
    Par supersmoos dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2007, 11h28

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