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 extraire des caractères d'une chaine ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Comment extraire des caractères d'une chaine ?
    Bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Monstres[p].Tag:= 1+'¥'+'1700'+'¥'+'1000'+'¥'+1;
    Est-il possible d'extraire les chiffres séparés par ¥ un par un et de les enregistrer dans un tableau virtuel ?
    Comme dans une sorte de Split à la visual basic lol
    Merci d'avance !

    [Modération]
    Balises code ajoutées par Laurent Dardenne
    [/Modération]

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    Si la question est d'extraire les chiffre, tu peut utiliser le copy(sting,cptDebut,size).
    Tu detecte le nombre de char entre deux '¥' puis copy dans une string. Le floattostr te permet de transtyper.

    Pour le coup du tableau virtuel ... ben ... je laisse de la place aux autres

  3. #3
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Fonction StringsOps.FromString dans l'unité SjrdLists.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #4
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    essayes de voir les propriétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    property DelimitedText: string;  et
    property CommaText: string;
    dans un TStrings
    http://www.pocketmt.com GLCD Font Creator home site.

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui ok,mais juste pour information,ces chiffres que je vous ai donnés comme exemple sont variables,donc je ne peux pas utiliser copy, car mes valeurs ne sont pas fixes !
    Je n'aurais pas tout le temps 1700 ou 1000,ca pourra trés bien etre 200 ou 33000 !!

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Si tu utilisais CR/LF (#13#10) au lieu de '¥', un TStringList ferait ça tout seul... Et pour ceci, utiliser StringReplace serait une bonne 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
    MaListe : TStringList ;
     
    MaListe:=TStringList.Create;
    // Remplacement "brutal" de tous les '¥' en CR/LF, dans une chaîne copie.
    // La chaîne originale n'est pas modifiée.
    MaListe.Text:=StringReplace(Monstres[p].Tag,'¥',#13#10,rfReplaceAll);
    // A ce moment, la chaîne est déjà "découpée".
    // On peut y accéder élément par élément, mais toujours sous forme texte.
    For I:=0 To (MaListe.Count-1) Do
        Begin
        // Les divers champs sont désormais accessibles via la propriété Strings.
        Valeur:=StrToInt(MaListe.Strings[I]);
        End; 
    // Ne pas oublier de libérer le TStringList si tu n'as plus besoin des valeurs !
    FreeAndNil(MaListe);
    Si tu dois rajouter/insérer des éléments, tu le fais sur le TStringList, puis tu réutilises StringReplace sur MaListe.Text (en inversant les 2ème et 3ème paramètres) avant de le réaffecter à ton Monstres[p].Tag.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci je vais tester ca de suite !!!

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai testé et j'ai un problème...

    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
     
    procedure TFStatus.Button7Click(Sender: TObject);
    var
    MaListe: TStringList;
    i: Integer;
    cont: string;
    valeur: string;
    begin
    MaListe:=TStringList.Create;
    cont:= '1'+'¥'+'1700'+'¥'+'1000'+'¥'+'2';
    MaListe.Text:=StringReplace(cont,'¥',#13#10,rfReplaceAll);
    for i:= 0 to MaListe.Count-1 do begin
    valeur:= MaListe.Strings[I];
    ShowMessage(valeur);
    end;
    FreeAndNil(MaListe);
    end;
    Quand je veux runner ca me dit :
    [Erreur] status.pas(718): Types incompatibles : 'TReplaceFlags' et 'Enumeration'

    ...

  9. #9
    Membre éprouvé
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Points : 957
    Points
    957
    Par défaut
    met le RFReplaceAll entre crochers [rfReplaceAll]
    http://www.pocketmt.com GLCD Font Creator home site.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Powa87
    [Erreur] status.pas(718): Types incompatibles : 'TReplaceFlags' et 'Enumeration'
    Désolé, je n'ai pas compilé ce code... Je me fais avoir à chaque fois avec ce paramètre !
    Effectivement, il faut le mettre entre crochets.

    Cependant, tu aurais pu le résoudre toi-même en regardant l'aide de Delphi.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Pourquoi sembêter à réinventer la roue ? ExtractStrings est une fonction standard Delphi

    ExtractStrings

    Remplit une liste de chaînes avec des sous-chaînes analysées depuis une liste délimitée.

    Unité

    Classes

    Catégorie

    routines de gestion des chaînes (à zéro terminal)

    function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;

    Description

    Utilisez ExtractStrings pour remplir une liste de chaînes avec les sous-chaînes de la chaîne terminée par le caractère Null spécifiée par Content.
    ...

  12. #12
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par cpdump
    Pourquoi sembêter à réinventer la roue ? ExtractStrings est une fonction standard Delphi
    Parceque d'une part, je ne crois pas qu'elle existe sur toutes les versions de Delphi (c'est d'ailleurs très pénible que l'aide Delphi ne mentionne pas à partir de quelle version de Delphi une fonction/classe est disponible).

    Ensuite, elle possède des limitations ennuyeuses (en bleu) :
    Citation Envoyé par Aide Delphi
    Separators is a set of characters that are used as delimiters, separating the substrings. Carriage returns, newline characters, and quote characters (single or double) are always treated as separators. Separators are ignored when inside a quoted string until the final end quote. (Note that quoted characters can appear in a quoted string if the quote character is doubled.)

    WhiteSpace is a set of characters to be ignored when parsing Content if they occur at the beginning of a string.

    Content is the null-terminated string to parse into substrings.

    Strings is a string list to which all substrings parsed from Content are added. The string list is not cleared by ExtractStrings, so any strings already in the string list are preserved.

    ExtractStrings returns the number of strings added to the Strings parameter.

    Note: ExtractStrings does not add empty strings to the list.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  13. #13
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Heu ok j'ai fait ce que vous m'avez dit,mais y a quand un meme un problm...

    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
     
    procedure TFStatus.Button7Click(Sender: TObject);
    var
    MaListe: TStringList;
    i: Integer;
    cont: string;
    valeur: string;
    begin
    MaListe:=TStringList.Create;
    cont:= '1'+'¥'+'1700'+'¥'+'1000'+'¥'+'2';
    MaListe.Text:=StringReplace(cont,'¥','#13#10',[rfReplaceAll]);
    for i:= 0 to MaListe.Count-1 do begin
    valeur:= MaListe.Strings[i];
    ShowMessage(valeur);
    end;
    FreeAndNil(MaListe);
    end;
    Mon ShowMessage ne m'indique pas ce que je veux il ne sépare pas du tout les caractères comme me l'avait indiqué Mac LAK
    // A ce moment, la chaîne est déjà "découpée".
    // On peut y accéder élément par élément, mais toujours sous forme texte.
    Et voici ce que me sort mon ShowMessage :
    ---------------------------
    The Millenium Duel
    ---------------------------
    1#13#101700#13#101000#13#102
    ---------------------------
    OK
    ---------------------------

  14. #14
    Inactif  

    Inscrit en
    Juillet 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 46
    Points : 135
    Points
    135
    Par défaut Strings
    essaye plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TFStatus.Button7Click(Sender: TObject);
    var
    MaListe: TStringList;
    i: Integer;
    cont: string;
    valeur: string;
    begin
    MaListe:=TStringList.Create;
    cont:= '1+W+1700+¥+1000+¥+2';
    on se sert du + comme separateur mais on peut mettre ce que l'on veut

    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
    i:=1;
    repeat
      valeur:=''';
      while Cont{i]<>'+' do
        begin 
          Valeur:=Valeur+cont[i];
          inc(i)
       end;
      if Valeur<>'' then 
        Maliste.Add(valeur)
      inc(i)
    until i>length(count);
     
    for i:= 0 to MaListe.Count-1 do 
      ShowMessage(MaListe.Strings[i]);
    FreeAndNil(MaListe);
    end;
    Cela devrait beaucoup mieux marché
    _______________________
    [Balises code rajoutées par Lil_jam63]

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Powa87
    Heu ok j'ai fait ce que vous m'avez dit,mais y a quand un meme un problm...
    <snip>
    Mon ShowMessage ne m'indique pas ce que je veux il ne sépare pas du tout les caractères comme me l'avait indiqué Mac LAK
    Normal, tu n'as pas recopié mon code correctement ! ;-)
    Tu remarqueras, pour le 3ème paramètre de StringReplace, que je n'ai pas mis de caractères ' autour de #13#10 ! J'avais cafouillé pour les crochets, mais sur ce coup, c'était normal. Tu crée dynamiquement une chaîne composée de 2 caractères seulement.

    En effet, sur ton code, au lieu de créer une chaîne de 2 caractères CR/LF (#13#10), tu crée une chaîne de 6 caractères '#13#10', ce qui est tout à fait différent !!

    Bref, tu dois écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaListe.Text:=StringReplace(cont,'¥',#13#10,[rfReplaceAll]);
    à la place. Ca marchera mieux !


    John Fullspeed Le réveillon a été dur, John ? Tu en oublies les balises code /code !
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Candidat au Club
    Inscrit en
    Janvier 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci bcp ca marche impec

  17. #17
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tu nous mets un p'tit clic sur le bouton [Résolu], pour fêter la nouvelle année ? ;-)

    Bonne année à tous !
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

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

Discussions similaires

  1. Extraire des caractères d'une chaine
    Par fabpeden dans le forum C
    Réponses: 5
    Dernier message: 07/05/2007, 10h09
  2. Réponses: 4
    Dernier message: 29/08/2006, 17h44
  3. Réponses: 4
    Dernier message: 11/05/2006, 14h41
  4. [MySQL] extraire des nombre d'une chaine de caractères et addition
    Par Yotho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/03/2006, 16h54
  5. Réponses: 9
    Dernier message: 17/01/2003, 11h45

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