Télécharger le zip
mmm ... bonne idée ... mais je crains que le compo soit 1 inutile 2 lourdpremierement, les TStrings possede une propriété Delimiter et DelimitedText qui permet de "spliter" les chaines contenues.deuxiement, regarde la fonction "chainepos" ici dans les codes sources, je pense qu'elle vas t'interressé car elle permet de recuperer n'importe qu'elle partie d'un texte selon un delimiteur qui peut etre aussi bien un caractere qu'un mots ou encore une phrase ...
Intéressant.Mais pourquoi vouloir en faire un composant ?Ton code est un peu redondant :function TSplit.Split(Str:string):TWordsContainer;var i,a,b:integer;begina:=0;b:=0;str:=str+' ';//On ajoute un espace sinon le dernier mot ne sera pas reconnu car// la string se fini par un caractère.for i:=0 to length(str) dobeginif str[i]=' ' then //Si le char testé est un espacebeginif Copy(str,a,i-a)=' ' then // On ajoute le mot en se repérant avec la dernièrea:=a+(i-a) // position de fin de mot ( ou de début de string ).elsebeginresult[b]:=Copy(str,a,i-a);a:=a+(i-a);//On ajoute la position de la fin du dernier mot trouvé.b:=b+1;//On passe à l'enregistrement suivant.end;end;end;end;Sans toucher à l'essentiel (j'ai renommé les variables pour m'y retrouver), et en respectant le concept, j'aurais fait :function TSplit.Split(Str: string): TWordsContainer;var i, Previous, Index: Integer;begin Previous := 0; Index := 0; Str := Str + ' '; for i := 0 to Length(Str) do begin if Str[i] = ' ' then begin Result[Index] := Copy(Str, Previous + 1, i - Previous - 1); Index := Index + 1; Previous := i; end; end;end;Bonne prog' :p
Ah, au fait, si tu veux utiliser un tableau dynamique :type TWordsContainer = array of string;function TSplit.Count: Integer;begin Result := High(WordsContainer);end;function TSplit.Split(Str: string): TWordsContainer;var i, Previous, Index: Integer;begin Previous := 0; Index := 0; Str := Str + ' '; SetLength(Result, 1); // <- tu définis la longueur for i := 0 to Length(Str) do begin if Str[i] = ' ' then begin Result[Index] := Copy(Str, Previous + 1, i - Previous - 1); Index := Index + 1; SetLength(Result, Index + 1); // <- tu définis la longueur Previous := i; end; end;end;Tu peux remplacer la méthode "function TSplit.Count: Integer;", qui devient inutile, par une propriété accessible.Bonne prog' :p
Merci bien, je ne me sert pas souvent des array et je ne connaissais pas cette petite "technique" toute bête !
Salut,Une StringList n'aurait elle pas fait l'affaire ?Procedure ExtractText(Separateur, Ligne: String; Var aList : TStringList);Var TmpText : String;Begin If aList = Nil Then Exit; While Pos(Separateur, Ligne) > 0 Do Begin TmpText := Copy(Ligne, 1, Pos(Separateur, Ligne) - 1); If TmpText <> EmptyStr Then aList.Add(TmpText); Ligne := Copy(Ligne, Pos(Separateur, Ligne) + 1, High(Integer)); End; If Ligne <> EmptyStr Then aList.Add(Ligne);End;Utilisation :procedure TForm1.Button1Click(Sender: TObject);Var aList : TStringList;begin aList := TStringList.Create; ExtractText(' ', 'Le forum de CodeS SourceS à changé', aList); Memo1.Lines.Clear; Memo1.Lines.AddStrings(aList); aList.Free;end;@+Cirec
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 598 716 membres 717 nouveaux aujourd'hui 15 441 membres club