Aide TEdit entrer plusieurs valeurs [Résolu]

dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 19 mai 2011 à 12:57 - Dernière réponse : dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

dubois77 689 Messages postés jeudi 17 avril 2008Date d'inscription 9 mars 2018 Dernière intervention - 23 mai 2011 à 07:41
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dubois77
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 19 mai 2011 à 14:32
0
Utile
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+
Commenter la réponse de cs_MAURICIO
dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 19 mai 2011 à 14:48
0
Utile
Merci
Mais je vois pas ton unité "cyStrUtils.pas"
Commenter la réponse de dioufthier
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 19 mai 2011 à 14:51
0
Utile
Dans le répertoire "cyComponents\Core"
A+


Composants Cindy pour Delphi
Commenter la réponse de cs_MAURICIO
dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 19 mai 2011 à 15:27
0
Utile
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
Commenter la réponse de dioufthier
dubois77 689 Messages postés jeudi 17 avril 2008Date d'inscription 9 mars 2018 Dernière intervention - 19 mai 2011 à 19:52
0
Utile
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
Commenter la réponse de dubois77
cs_yanb 260 Messages postés lundi 27 octobre 2003Date d'inscription 4 mars 2016 Dernière intervention - 19 mai 2011 à 21:40
0
Utile
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
Commenter la réponse de cs_yanb
dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 19 mai 2011 à 22:42
0
Utile
Merci à tous !

Je vais tester vos méthodes.
Je reviendrais vous donner les nouvelles
Commenter la réponse de dioufthier
dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 22 mai 2011 à 23:11
0
Utile
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.
Commenter la réponse de dioufthier
dioufthier 16 Messages postés samedi 19 juillet 2008Date d'inscription 20 juin 2012 Dernière intervention - 23 mai 2011 à 12:48
0
Utile
Merci dubois77
Commenter la réponse de dioufthier

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.