begin process at 2012 02 10 19:32:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Compression & Split

 > FONCTION SPLIT

FONCTION SPLIT


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Compression & Split Classé sous :split, délimiteur, fonctionne, tableau Niveau :Débutant Date de création :30/01/2008 Vu :5 169

Auteur : crackspider7676

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 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 => ' '


 Sources de la même categorie

Source avec Zip Source avec une capture UPXHELPER V1.1.1 par Christophe67
Source avec Zip Source avec une capture DELPHI : PROCEDURE SPLIT SIMILAIRE A LA FONCTION EPONYME EN ... par FENETRES
Source avec Zip STREAMZIP par simonpelloquin
Source avec Zip MAKE CAB + CHECKLISTBOX par simonpelloquin
Source avec Zip Source avec une capture COMPRESSEUR JPEG par Gimli

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TABLEAU INFO SAVE INI par quentinix
Source avec Zip Source avec une capture UTILISER LES COMPOSANTS PAR LEURS NUMÉROS par Dany3
Source avec Zip Source avec une capture COMPRENDRE UN PEU PLUS LES TABLEAUX EN RXRICHEDIT par ODLCITEINFO
Source avec Zip Source avec une capture STRINGGRID EXTENDED par dwmx5
Source avec Zip Source avec une capture DELPHI : PROCEDURE SPLIT SIMILAIRE A LA FONCTION EPONYME EN ... par FENETRES

Commentaires et avis

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;

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;

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!

Commentaire de nethacker le 01/02/2008 21:14:23 10/10

Y'a aussi les fonctions Rexx !

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).

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.

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

Commentaire de Balthus14 le 24/12/2010 12:10:19

Vieux post mais si cela peut aider !

voilà ma solution pour éviter la prise en considération du caractère espace par fonction "TSrings.DelimitedText"

Procedure ScinderPerso(S: string; const Delimiteur: char;Strings : TStrings);
begin
  if assigned(Strings) then
  begin
    while Pos(DElimiteur,S)<>0 do
    begin
        Strings.add(copy(S,1,pred(Pos(Delimiteur,S))));
        delete(S,1,Pos(Delimiteur,S));
    end;
    if S<>'' then Strings.add(S);
  end;
end;

 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,106 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales