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

Free Pascal Discussion :

Recherche fonction split


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    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
    Par défaut Recherche fonction split
    Bonjour,

    je cherche une fonction Split pour découper une chaine de caractères selon un délimiteur

    merci

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 135
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 135
    Par défaut
    Yop

    Quelque chose comme ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
    begin
       Assert(Assigned(Strings)) ;
       Strings.Clear;
       Strings.Delimiter := Delimiter;
       Strings.DelimitedText := Input;
    end;
    usage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Split(' ', ledRsyncCmd.Text, Fcmd);
    Fcmd est la TStringList de destination, ledRsyncCmd est le TLabeledEdit dont on va splitter la propriété "text".

  3. #3
    Membre très actif
    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
    Par défaut
    Bonjour et merci de la réponse.

    Oui une procédure de ce genre m’intéresserait, mais cependant je n'ai pas réussi à l'utiliser.

    Je voulais le faire dans un programme console sans composants.

    Cordialement.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    le fait que ce soit une appli console ne veut pas dire que tu ne peut pas utiliser de classe ni de composant
    par exemple le TStringList n'est pas un composant visuel et donc dans ton cas peut très bien être utilisé

    mais si tu ne veut absolument pas de composant tu peut tres bien utiliser
    une boucle et remplir un array of string

    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
     
    Type
      TArrayStr = Array Of string;
     
    implementation
     
    function SplitString(Text: String,Delimiter : char): TArrayStr;
    var
       intIdx: Integer;
       intIdxOutput: Integer;
    begin
       intIdxOutput := 0;
       SetLength(Result, 1);
       Result[intIdxOutput] := ''; 
     
       for intIdx := 1 to Length(Text) do
       begin
          if Text[intIdx] = Delimiter then
          begin
             intIdxOutput := intIdxOutput + 1;
             SetLength(Result, Length(Result) + 1);
          end
          else
             Result[intIdxOutput] := Result[intIdxOutput] + Text[intIdx];
       end;
    end;

  5. #5
    Membre confirmé Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 63
    Par défaut
    Bonjour,

    Sinon, tu as l'unité StrUtils et les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Type
      TSysCharSet = Set of AnsiChar;
      PSysCharSet = ^TSysCharSet;
     
    function WordCount(const S: string; const WordDelims: TSysCharSet): Integer;
    function WordPosition(const N: Integer; const S: string; const WordDelims: TSysCharSet): Integer;
    function ExtractWord(N: Integer; const S: string;  const WordDelims: TSysCharSet): string;inline;
    function ExtractWordPos(N: Integer; const S: string; const WordDelims: TSysCharSet; var Pos: Integer): string;
    function ExtractDelimited(N: Integer; const S: string;  const Delims: TSysCharSet): string;
    function ExtractSubstr(const S: string; var Pos: Integer;  const Delims: TSysCharSet): string;

  6. #6
    Membre très actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 412
    Billets dans le blog
    2
    Par défaut Une des innombrables versions de split
    Une des innombrables manières d'implémenter un split:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NB_FIELDS = 69; // nombre arbitraire de champs
    type TStringArray = array[0 .. NB_FIELDS] of string;
    Str: chaîne à découper
    Sep: Séparateur. Pour la tabulation, utiliser #9
    Retourne: Un TStringArray
    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
     
    function Split(const Str: string; const Sep: string):TStringArray;
    var
      pn   : integer;
      ps   : integer;
      S    : string;
     
    begin
      for pn:=0 to High(Result) do Result[pn]:='';
      S:=Str;
      ps:=0;
      try
        pn:=0;
        repeat
         if pn>High(Result) then Break;
         ps:=Pos(Sep, S);
         //s:=Copy(s,0, ps-1);
         Result[pn]:=Trim(Copy(s,0, ps-1));
         Inc(pn);
         s:=Copy(s, 1+ps, Length(s));
        until ps=0;
        Result[pn-1]:=Trim(s);
      except
      end;
    end;
    Exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    EWE := Split('Ta mère en short', ' ');
     
    WU := EWE[1];
     
    writeln(WU); // affiche 'mère'

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  2. [String] fonction split
    Par tck-lt dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2005, 17h45
  3. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21
  4. [Fortran 90] Fonction Split()
    Par gchazelle dans le forum Fortran
    Réponses: 2
    Dernier message: 02/03/2005, 10h16
  5. Recherche fonctions rendant la valeur
    Par Bertrand_Collet dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/11/2002, 12h05

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