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 Delphi Discussion :

Comment récupérer uniquement les chiffres dans une ligne de texte ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut Comment récupérer uniquement les chiffres dans une ligne de texte ?
    salut,
    veuillez me donner un coup de main:

    je souhaiterais parcourir toutes les lignes d'un memo tout récuperant tout entier rencontré dans la chaine.

    merci
    La patience est un Chemin d'or

  2. #2
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    VAR s:string;
       i:integer;
       n:string;
    begin
          s:=memo.text;
          n:='';
          for i:=1 to length(s) do
            if s[i] in ['0'..'9'] then n:=n+s[i];
    end;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je propose une version qui permet de rechercher plusieurs nombres dans une chaine de caractères. La méthode est peut être pas optimale mais néanmoins ça fonctionne. Voici le code :

    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
    var
      Form1: TForm1;
      // Tableau dynamique d'entiers
      Tab : array of integer;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.TrouverNombreClick(Sender: TObject);
    var
    i,j:integer;
    Nbre:string;
    MonTexte:String;
    begin
      j:=0;
      SetLength(Tab,j);
      Nbre:='';
      MonTexte:=Memo1.Text;
      for i:=1 to Length(MonTexte) do
      begin
        if MonTexte[i] in ['0'..'9'] then
          Nbre:=Nbre+MonTexte[i]
        else
        begin
          if Nbre<>'' then
          begin
            SetLength(Tab,j+1);
            Tab[j]:=StrToInt(Nbre);
            j:=j+1;
            Nbre:='';
          end;
        end;
      end;
    end;
     
    procedure TForm1.AfficherNombreClick(Sender: TObject);
    var
    i:integer;
    begin
      for i:=Low(Tab) to High(Tab) do
      ShowMessage(IntToStr(Tab[i]));
    end;
     
    end.
    J'espère que celà te conviendra

  4. #4
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut Re:Comment récuperer uniquement les numériques dans une ligne de texte ?
    salut
    merci vraiment car là j'ai avancé un tout petit peu.

    en fait j'ai du texte dans un mémon et je souhaiterais récupérer dans chaque ligne chaque numérique qui sera écrit dans un fichier texte.Chaque numérique écrit dans le fichier sera séparé par un caractère spéciale(; ou #).
    je veux donc faire cela en parcourant tout le mémo.

    voila le code que j'ai écrit:
    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
     
     for k := 0 to memo1.lines.count do
          begin
          txt:=Memo1.lines[k];
           j:=0;
           SetLength(Tab,j);
           Nbre:='';
     
           for i:=1 to Length(txt) do
              begin
                if txt[i] in ['0'..'9'] then
                begin
                Nbre:=Nbre+txt[i];
                write(F,trim(Nbre)+';');
                end
                else
                begin
                   if Nbre<>'' then
                   begin
                     SetLength(Tab,j+1);
                     Tab[j]:=StrToInt(Nbre);
                     j:=j+1;
                     Nbre:='';
                   end;
               end;
            end;
    l'écriture ne donne pas le résultat voulu dans mon fichier texte:

    1;1;12;4;45;454;7;74;9;


    au lieu de 1;12;454;74;9;


    merci de me donner un coup de main
    La patience est un Chemin d'or

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    normal;
    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
           for i:=1 to Length(txt) do
              begin
                if txt[i] in ['0'..'9'] then
                begin
                Nbre:=Nbre+txt[i];
                end
                else
                begin
                   if Nbre<>'' then
                   begin
                     SetLength(Tab,j+1);
                     Tab[j]:=StrToInt(Nbre);
                     j:=j+1;
                    write(F,trim(Nbre)+';');                 Nbre:='';
                   end;
               end;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Bonjour,

    J'apporte une petite modification de mon code. Le soucis est que si un nombre était trouvé en fin de chaine, on ne le prenait pas en compte.

    Voici le code modifié :

    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
    procedure TForm1.TrouverNombreClick(Sender: TObject);
    var
    i,j:integer;
    Nbre:string;
    MonTexte:String;
    begin
      j:=0;
      SetLength(Tab,j);
      Nbre:='';
      MonTexte:=Memo1.Text;
      for i:=1 to Length(MonTexte) do
      begin
        if MonTexte[i] in ['0'..'9'] then
          Nbre:=Nbre+MonTexte[i]
        else
        begin
          if ((Nbre<>'') or ((i=length(MonTexte)) and (Nbre<>'')))  then
          begin
            SetLength(Tab,j+1);
            Tab[j]:=StrToInt(Nbre);
            j:=j+1;
            Nbre:='';
          end;
        end;
      end;
    end;
    Donne nous un exemple de contenu du Memo1 et ce que souhaites qu'il affiche. Comme ça de notre coté, on peut tester et coller plus à tes besoins

    Voilà.
    A+

  7. #7
    Membre du Club Avatar de bigey3
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 124
    Points : 50
    Points
    50
    Par défaut récuper tout nombre dans une chaine
    merci pour ton coup de main.il faut que je t'explique tout le problème.

    voila tout le code que j'ai écrit:

    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
     
    procedure TForm1.Button2Click(Sender: TObject);
    var lig,Nbre:string;
    i,j,cpt,k:integer;
    Txt:string;
    Tab : array of integer;
    begin
      assignfile(F,c:\test.txt);
      rewrite(F);
      cpt:=1;
     
      for k := 0 to memo1.lines.count do
          begin
          txt:=Memo1.lines[k];
           j:=0;
           SetLength(Tab,j);
           Nbre:='';
     
           for i:=1 to Length(txt) do
              begin
                if txt[i] in ['0'..'9'] then
                   begin
                   Nbre:=Nbre+txt[i];
                   cpt:=cpt+1;
     
                   if cpt<5 then  //pour écrire 4 nombres sur une ligne
                    write(F,trim(Nbre)+';')
                    else
                       if cpt=5 then
                       begin
                        write(F,trim(Nbre));
                        writeln(F);
                        cpt:=1;
                        end
                       else
                       write(F,trim(Nbre)+';');
                    end
     
                   end;
               end;
     
            begin
            writeln(F);write(F,trim(Nbre)+';');
            cpt:=0;
            end;
     
      closefile(F);
     
    end;
    ----------------------------
    ce code me donne comme résultat:

    -------------------------
    le mémo contient ceci

    Service Class 1
    Installed = 12
    Active = 454
    Deactive = 74
    Expired = 9

    Service Class 2
    Installed = 12
    Active = 15
    Deactive = 2
    Expired = 0


    l'écriture dans mon fichier doit etre:

    1;12;454;74;9
    2;12;15;2;0

    car meme les nombres doivent etre écrit
    --------------
    ce code me donne comme résultat:
    1;1;12;4
    45;454;7;74
    9;2;1;12
    1;15;2;0

    en fait les nombres de 2 chiffres et plus sont découpés.


    merci les gars
    La patience est un Chemin d'or

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    mieux utlisé les fichier INI
    TIniFile stocke et lit des informations et des paramètres propres à une application à partir de fichiers INI.

    Unité

    IniFiles

    Description

    TIniFile permet de gérer le stockage et la lecture d'informations et de paramètres propres à une application dans un fichier INI standard. Un fichier INI stocke des informations par groupes logiques appelés "sections". Dans chaque section, les valeurs de données réelles sont stockées dans des clés nommées. Ces clés sont de la forme*:
    <nomclé>=<valeur>
    FileName est transmis au constructeur TIniFile et identifie le fichier INI auquel accède l'objet.
    Remarque*: Sous Linux, TIniFile est identique à TMemIniFile. Par contre, dans la version Windows, TIniFile écrit en mémoire tampon différemment de TMemIniFile.
    n'oublie pas d'ulisé les balise code
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je te propose un truc de ce 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
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
    lig,Nbre:string;
    i,j,cpt:integer;
    MonTexte:String;
    Tab:array of string;
    F:TextFile;
    begin
      AssignFile(F,'C:\Test.txt');
      Rewrite(F);
      j:=0;
      cpt:=0;
      SetLength(Tab,j);
      Nbre:='';
      lig:='';
      MonTexte:=Memo1.Text;
      for i:=1 to Length(MonTexte) do
      begin
        if MonTexte[i] in ['0'..'9'] then
          Nbre:=Nbre+MonTexte[i]
        else
        begin
          if ((Nbre<>'') or ((i=length(MonTexte)) and (Nbre<>'')))  then
          begin
            SetLength(Tab,j+1);
            Tab[j]:=Nbre;
            j:=j+1;
            cpt:=cpt+1;
            lig:=lig+Nbre;
            if ((cpt<5) and (Nbre<>'')) then
            begin
              lig:=lig+';';
            end;
     
            if cpt=5 then
            begin
              ShowMessage(lig);
              cpt:=0;
              Writeln(F,lig);
              lig:='';
            end;
     
            Nbre:='';
          end;
        end;
      end;
      CloseFile(F);
    end;
    A toi de voir si ca te convient.
    A+

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

Discussions similaires

  1. extraire uniquement les chiffres d'une cellule
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/08/2017, 18h25
  2. extraire chiffre dans une ligne de texte
    Par zer0o dans le forum Excel
    Réponses: 4
    Dernier message: 14/11/2014, 14h24
  3. [AC-2007] Comment récupérer seulement les chiffres dans un libellé
    Par Debutant10 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/11/2011, 13h17
  4. [Toutes versions] sélectionner uniquement les chiffres dans une phrase ?
    Par bourrico dans le forum VBA Word
    Réponses: 1
    Dernier message: 24/09/2009, 00h12
  5. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36

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