Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FONCTION SPLIT


Information sur la source

Description

Du fait que les fonctions Split que j'ai trouvé sur le web ne marchait pas correctement, j'ai décidé d'en créer une répondant à mes besoins.
Voici celle-ci et un exemple type :
 

Source

  • Procedure Split(Var retour : Array Of String; Chaine : String; Car : Char);
  • Var
  • Compteur : Integer;
  • PosUne : Integer;
  • PosDeux : Integer;
  • Temp : String;
  • Begin
  • PosUne := 1;
  • PosDeux := Pos(Car,Chaine);
  • Compteur := 0;
  • While ((PosDeux <> 0) and (Compteur <> Length(Retour))) Do
  • Begin
  • Retour[Compteur] := Copy(Chaine, PosUne, (PosDeux - PosUne));
  • If Length(Retour[Compteur]) = 0 then Retour[Compteur] := ' ';
  • Temp := Copy(Chaine, PosDeux + 1, (Length(Chaine) - PosDeux));
  • Chaine := Temp;
  • PosDeux := Pos(Car,Chaine);
  • Compteur := Compteur + 1;
  • End;
  • If Compteur <> Length(Retour) Then
  • Begin
  • Retour[Compteur] := Copy(Chaine, PosUne, (Length(Chaine) - (PosUne - 1 )));
  • If Length(Retour[Compteur]) = 0 then Retour[Compteur] := ' ';
  • End;
  • End;
  • Procedure TForm1.Button1Click(Sender: TObject);
  • Var
  • Mon_Tableau : array[1..10] of string;
  • Ma_Chaine : String;
  • Mon_Delimiteur : Char;
  • i : Integer;
  • Begin
  • // On peut remarquer que Ma_Chaine comporte des chaines vides entre le délimiteur //
  • Ma_Chaine := 'test1;;test3;test4;test5;test6;test7;;test9;';
  • Mon_Delimiteur := ';';
  • Split(Mon_Tableau, Ma_Chaine, Mon_Delimiteur);
  • For i:= 1 to 10 Do ShowMessage(Mon_Tableau[i]);
  • End;
Procedure Split(Var retour : Array Of String; Chaine : String; Car : Char);
Var
Compteur : Integer;
PosUne : Integer;
PosDeux : Integer;
Temp : String;

Begin
PosUne := 1;
PosDeux := Pos(Car,Chaine);

Compteur := 0;

While ((PosDeux <> 0) and (Compteur <> Length(Retour))) Do
Begin
  Retour[Compteur] := Copy(Chaine, PosUne, (PosDeux - PosUne));
  If Length(Retour[Compteur]) = 0 then Retour[Compteur] := ' ';
  Temp := Copy(Chaine, PosDeux + 1, (Length(Chaine) - PosDeux));
  Chaine := Temp;
  PosDeux := Pos(Car,Chaine);
  Compteur := Compteur + 1;
End;

If Compteur <> Length(Retour) Then
Begin
 Retour[Compteur] := Copy(Chaine, PosUne, (Length(Chaine) - (PosUne - 1 )));
 If Length(Retour[Compteur]) = 0 then Retour[Compteur] := ' ';
End;

End;



Procedure TForm1.Button1Click(Sender: TObject);
Var
  Mon_Tableau : array[1..10] of string;
  Ma_Chaine : String;
  Mon_Delimiteur : Char;
  i : Integer;

Begin
  // On peut remarquer que Ma_Chaine comporte des chaines vides entre le délimiteur //
  Ma_Chaine := 'test1;;test3;test4;test5;test6;test7;;test9;';
  Mon_Delimiteur := ';';

  Split(Mon_Tableau, Ma_Chaine, Mon_Delimiteur);

  For i:= 1 to 10 Do ShowMessage(Mon_Tableau[i]);
End;

Conclusion

Les résultats obtenus sont:
i = 1 => 'test1'
i = 2 => ' '
i = 3 => 'test3'
i = 4 => 'test4'
i = 5 => 'test5'
i = 6 => 'test6'
i = 7 => 'test7'
i = 8 => ' '
i = 9 => 'test9'
i =10 => ' '

 

Commentaires et avis

signaler à un administrateur
Commentaire de f0xi le 30/01/2008 01:48:28 administrateur CS


var TSL : TStringList;
begin
  TSL := TStringList.Create;
  try
    TSL.Delimiter := ';';
    TSL.DelimitedText := 'test1;;test3;test4;test5;test6;test7;;test9;';

    ListBox1.Items.Assign(TSL); // assignation vers une liste par exemple

  finally
    TSL.Free;
  end;
end;

signaler à un administrateur
Commentaire de f0xi le 30/01/2008 01:54:43 administrateur CS



ou en fonction, toujours avec la classe TStrings / TStringList


function Split(const S: string; const Delimiter: char; Strings: TStrings);
begin
  if assigned(Strings) then
  begin
    Strings.Delimiter     := Delimiter;
    Strings.DelimitedText := S;
  end;
end;

signaler à un administrateur
Commentaire de crackspider7676 le 30/01/2008 01:55:57

j'avais trouver un code utilisant le type TStringList sur http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm et dans certains cas j'étais confronté à une erreur.
PS: au bout de 200 split, il y avait parfois un décallage => Bizarre.
Merci quand même!

signaler à un administrateur
Commentaire de nethacker le 01/02/2008 21:14:23 10/10

Y'a aussi les fonctions Rexx !

signaler à un administrateur
Commentaire de FENETRES le 11/02/2008 10:33:04

Déclarer la longueur du tableau limite sérieusement l'intérêt de cette source. Il fallait passer un tableau dynamique en paramètre (type formel).

signaler à un administrateur
Commentaire de crackspider7676 le 11/02/2008 10:49:53

Oui, c'est vrai mais dans mon cas, cela m'arrangeait étant donné que la chaine à splitter contient toujours 10 champs.

signaler à un administrateur
Commentaire de FENETRES le 11/02/2008 11:06:49

Ignorant l'existence de ta source, j'ai déposé une version plus générale. J'espère que tu ne m'en feras pas grief.

http://www.delphifr.com/codes/DELPHI-PROCEDURE-SPLIT-EQUIVALENTE-FONCTION-EPONYME-VB_45704.aspx

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

prb avec dll et tableau dynamique [ par bd ] actuellement je recois en parametre d'une fonction un tableau de longueur variable. ce tableau est rempli dans la fonction de la dll.au retour dans la tableau dynamique de type TStrings [ par Teardrop ] Bonjour,je suis sur un petit projet de client mail utilisant le composant Pop3Client du pack ICS de F.Piette.J'aimerai bien pouvoir stocker les header Insertion d'un tableau dans un DBRichEdit [ par Adel ] Pour les besoins de la réalisation d'un mini traitement de texte je voudrai savoir s'il est possible d'insérer un tableau multicolonnes dans un DBRich page recherche dans forum ne fonctionne pas [ par mike255 ] je ne sais pas si cela vient de moi mais les sujets sont bien listes apres la demande de recherche mais les liens qui y menent sont morts et a notre a DELPHI - WORD : quelle solution technique pour un tableau sous Word ? [ par manudel ] Je dois récupérer le contenu d'un curseur avec un composant OracleDataSet.Sur mon document Word, j'ai un tableau de 10 lignes, avec 8 colonnes.Dans mo [debutant] Probleme de Pointer... ou pas ??? [ par damanix ] Alors Voila, mettons que j'ai un typetype TPersonne= class(TObject) nom: String; taille: Integer; poids: Integer; end;que j'ai un array dynam passer un tableau de variant à un paramètre Integer [ par manudel ] Je déclare un tableau de Variant : tab := VarArrayCreate([0,100],varVariant);que j'alimente.quand il est alimenté, il a cette forme :1,2,3,4,5,6,7,8, suppression dynamique [ par seeev ] Bonjour, j'ai un probleme dont je n'arrive pas à me sortir.je stoque des TSpeedButton dans un tableau de manière à pouvoir les créer, les afficher et identifier une form [ par seeev ] Bonjour à tousVoilà, je crée des fenêtres dynamiquement à partir d'un type de fenetre que j'ai appeleé FormGraph enfin peu importe...Le fait est que j AFFICHER UN TABLEAU DYNAMIQUE [ par ghassenus ] salut je voudrais bien afficher un tableau dynamique dans un TSTRING mais j'y arrive pas alors de l'aide serais la bien venue:)Tendrement


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.