Aide TEdit entrer plusieurs valeurs

Résolu
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012 - 19 mai 2011 à 12:57
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012 - 23 mai 2011 à 12:48
Bonjour,

Je suis débutant en Delphi .
je sollicite votre aide .
J'ai crée un champ Edit et je voudrais récuperer les valeurs que je rentre dedans .
Ce n'est pas une seule valeur, mais une liste de valeurs, que je veux séparer par des virgules.

Merci d'avance de votre aide

10 réponses

dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
23 mai 2011 à 07:41
si je comprends bien tu as :
edit1.text := '1,2,3,4,5';
tu veux récupérer chaque valeur
donc :
edit2.text := mot(edit1.txt,1);
edit3.text := mot(edit1.txt,2);
edit4.text := mot(edit1.txt,3);
edit52.text := mot(edit1.txt,4);

Il faut juste changer dans la function MOT ces lignes : (si tu utilises la mienne !) :
m := pos(' ',h); en m := pos(',',h);
puisque ton séparateur est une virgule dans don exemple

PS : (pour les "pros") je n'ai pas utilisé posex qui simplifierais beaucoup cette procédure car il n'est pas compatible avec toutes les versions de Delphi
Dubois77
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
19 mai 2011 à 14:32
Salut,

fait une recherche sur les sous-chaines.

Tu peux aussi utiliser mon unité "cyStrUtils.pas" inclue dans ce pack de compos ici:
Composants Cindy pour Delphi

Les focntions concernant les sous-chaines commencent par SubString ...

A+
0
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012
19 mai 2011 à 14:48
Merci
Mais je vois pas ton unité "cyStrUtils.pas"
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
19 mai 2011 à 14:51
Dans le répertoire "cyComponents\Core"
A+


Composants Cindy pour Delphi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012
19 mai 2011 à 15:27
J'ai pas pu me retrouver avec ton unité
Mais je vais continuer a chercher.
Si jamais tu peux me proposer quelque chose de plus précis, je suis preneur
Merci
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
19 mai 2011 à 19:52
Esaye cette petite procédure
function  MOT(h:string; n:integer=1):variant;
// si n=1, peut être omis :
// soit z = '5 toto 6 papa'
//nbre := mot(Z); renvoie 5 dans l'integer nbre;
//chaine := mot(z,2) renvoie 'toto' dans le string chaine
var m,i,l:integer;
begin
m := pos(' ',h);
if m=0 then
   begin
   result := h;
   exit
   end;
if n=1  // premier mot
   then begin
        result := copy(h,1,m-1);
        exit
        end;
l := length(h);
for i:=1 to n-1 do
    begin
    m := pos(' ',h);
    if m=0 then
       begin
       result := '';
       exit;
       end;
    h := trim(copy(h,m,l)); // on enlève le mot i
    end;
m := pos(' ',h);
if m=0
   then result := h
   else result := copy(h,1,m);
end;



Dubois77
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 13
19 mai 2011 à 21:40
Salut,
@dubois77
Je pense que ta fonction peut-être remplacé simplement comme ceci (pas testé)
function Mot(h:string; n:integer=1):variant;
var
    T : TStringList;
begin
    T := TStringList.Create;
    try
        T.Delimiter := ' ';
        T.DelimitedText := h;
        if (T.Count <> -1) and (n <= T.Count) then
            Result := T.Strings[n-1]
        else
            Result := Format('Pas de mot en position %d',[n]);
    finally
        T.Free;
    end;
end;

@Dioufthier
Que cherche tu as faire exactement remplacer une chaine '5 toto 6 papa' par '5,toto,6,papa'
(J'utilise ton exemple dubois77,il me plait bien )
alors utilise StringReplace exemple
Edit1.Text := StringReplace('5 toto 6 papa',' ',',',[rfReplaceAll]);

ou séparer '5,toto,6,papa' alors utilise les TStringList
Un exemple tout bête avec un bouton et un memo (pas testé)
procedure SepEdit(S: string; List: TStrings);
var
    T : TStringList;
begin
    T := TStringList.Create; //Création TStringList
    try
        T.Delimiter := ','; //Pas utile par défaut c'est déjà ','
        T.DelimitedText := S; //Séparation du texte
        List.Clear; //Efface le contenu précédent
        List.AddStrings(T); //Mise en place du trie dans le TStrings ici Memo1.Lines
    finally
        T.Free; // Libération TStringList
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    SepEdit('5,toto,6,papa',Memo1.Lines);
end;

J'espère t'avoir aidé
@+yanb
0
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012
19 mai 2011 à 22:42
Merci à tous !

Je vais tester vos méthodes.
Je reviendrais vous donner les nouvelles
0
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012
22 mai 2011 à 23:11
En fait, ce que je veux exactement, c'est ecrire une liste de valeurs dans un Edit, et les récuperer toutes .
Par exemple : 1,2,3,4,5.
0
dioufthier Messages postés 16 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 20 juin 2012
23 mai 2011 à 12:48
Merci dubois77
0