|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonsoir à tous.
j'ai besoin de supprimer des espaces entre les mots dans un champ type chaine. je m'explique : dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par un ou plusieurs espaces. je veux conserver un et un seul espace entre chaque mot. y-a t'il une instruction sql qui fait ça ? comment puis-je interdire plusieurs espaces (dans un édit) entre chaque mot ? |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Sur Edit1Change, tu modifies la valeur de la propriété Text, en prenant soin
préalablement de mémoriser SelStart et SelLength, et de les restaurer après avoir fait le nettoyage dans ta chaine... Pour nettoyer la chaine... Tu crées une fonction qui prend une chaine en paramètre et qui en renvoie une autre... Si le retour de la fonction est différent du contenu de Edit1.Text alors, tu modifies le contenu... C'est une idée. delphi <logiciel.concept@orange.fr> :: Bonsoir à tous. :: j'ai besoin de supprimer des espaces entre les mots dans un champ :: type chaine. :: je m'explique : :: dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par :: un ou plusieurs espaces. :: je veux conserver un et un seul espace entre chaque mot. :: y-a t'il une instruction sql qui fait ça ? :: comment puis-je interdire plusieurs espaces (dans un édit) entre :: chaque mot ? |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
c'est ça que je n'arrive pas à faire, la fonction qui va bien.
je ne sais pas comment compter le nombre de mots pour pouvoir compter le nombre d'espaces autorisés. une idée ? "BigGrizzly" <biggrizzlyENLEVERCA@zoo-logiqueETCAAUSSI.org> a écrit dans le message de news:ff331b$25m$1@sd-6498.dedibox.fr... > Sur Edit1Change, tu modifies la valeur de la propriété Text, en prenant > soin > préalablement de mémoriser SelStart et SelLength, et de les restaurer > après > avoir fait le nettoyage dans ta chaine... > > Pour nettoyer la chaine... Tu crées une fonction qui prend une chaine en > paramètre et qui en renvoie une autre... Si le retour de la fonction est > différent du contenu de Edit1.Text alors, tu modifies le contenu... > > C'est une idée. > > delphi <logiciel.concept@orange.fr> > :: Bonsoir à tous. > :: j'ai besoin de supprimer des espaces entre les mots dans un champ > :: type chaine. > :: je m'explique : > :: dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par > :: un ou plusieurs espaces. > :: je veux conserver un et un seul espace entre chaque mot. > :: y-a t'il une instruction sql qui fait ça ? > :: comment puis-je interdire plusieurs espaces (dans un édit) entre > :: chaque mot ? > > |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
delphi a écrit :
> c'est ça que je n'arrive pas à faire, la fonction qui va bien. > je ne sais pas comment compter le nombre de mots pour pouvoir compter le > nombre > d'espaces autorisés. > une idée ? J'ai du développer ça un certain nombre de fois... mais là, je n'ai plus l'algo sous la main... Si je devais le refaire, je parcourrais la chaîne, et si je tombe sur un espace, je regarderais le caractère suivant, et si c'est un espace, je le supprime... jusqu'à ce que le nouveau caractère suivant ne soit pas un espace, auquel cas je reprendrais ma boucle principale... Ce ne serait donc pas une boucle for, mais plutôt une boucle while... etc. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Merci pour tout ça, je vais tester.
"BigGrizzly" <bigENLEVERCAgrizzly@zoo-loETCAAUSSIgique.org> a écrit dans le message de news:ff34iv$2mt$1@sd-6498.dedibox.fr... > delphi a écrit : >> c'est ça que je n'arrive pas à faire, la fonction qui va bien. >> je ne sais pas comment compter le nombre de mots pour pouvoir compter le >> nombre >> d'espaces autorisés. >> une idée ? > > J'ai du développer ça un certain nombre de fois... mais là, je n'ai plus > l'algo sous la main... > > Si je devais le refaire, je parcourrais la chaîne, et si je tombe sur un > espace, je regarderais le caractère suivant, et si c'est un espace, je le > supprime... jusqu'à ce que le nouveau caractère suivant ne soit pas un > espace, auquel cas je reprendrais ma boucle principale... > > Ce ne serait donc pas une boucle for, mais plutôt une boucle while... > > etc. |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
delphi a écrit :
> Merci pour tout ça, je vais tester. > "BigGrizzly" <bigENLEVERCAgrizzly@zoo-loETCAAUSSIgique.org> a écrit dans > le message de news:ff34iv$2mt$1@sd-6498.dedibox.fr... >> delphi a écrit : >>> c'est ça que je n'arrive pas à faire, la fonction qui va bien. >>> je ne sais pas comment compter le nombre de mots pour pouvoir compter >>> le nombre >>> d'espaces autorisés. >>> une idée ? >> >> J'ai du développer ça un certain nombre de fois... mais là, je n'ai >> plus l'algo sous la main... >> >> Si je devais le refaire, je parcourrais la chaîne, et si je tombe sur >> un espace, je regarderais le caractère suivant, et si c'est un espace, >> je le supprime... jusqu'à ce que le nouveau caractère suivant ne soit >> pas un espace, auquel cas je reprendrais ma boucle principale... >> >> Ce ne serait donc pas une boucle for, mais plutôt une boucle while... >> >> etc. > Et plutôt que supprimer le caractère, en fait, mon algo se contenterait de reconstruire une chaine... à renvoyer en résultat. Je ne sais pas si je suis clair... |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
c'est clair, je pense faire comme ça.
"BigGrizzly" <bigENLEVERCAgrizzly@zoo-loETCAAUSSIgique.org> a écrit dans le message de news:ff35ft$36l$1@sd-6498.dedibox.fr... > delphi a écrit : >> Merci pour tout ça, je vais tester. >> "BigGrizzly" <bigENLEVERCAgrizzly@zoo-loETCAAUSSIgique.org> a écrit dans >> le message de news:ff34iv$2mt$1@sd-6498.dedibox.fr... >>> delphi a écrit : >>>> c'est ça que je n'arrive pas à faire, la fonction qui va bien. >>>> je ne sais pas comment compter le nombre de mots pour pouvoir compter >>>> le nombre >>>> d'espaces autorisés. >>>> une idée ? >>> >>> J'ai du développer ça un certain nombre de fois... mais là, je n'ai plus >>> l'algo sous la main... >>> >>> Si je devais le refaire, je parcourrais la chaîne, et si je tombe sur un >>> espace, je regarderais le caractère suivant, et si c'est un espace, je >>> le supprime... jusqu'à ce que le nouveau caractère suivant ne soit pas >>> un espace, auquel cas je reprendrais ma boucle principale... >>> >>> Ce ne serait donc pas une boucle for, mais plutôt une boucle while... >>> >>> etc. >> > > Et plutôt que supprimer le caractère, en fait, mon algo se contenterait de > reconstruire une chaine... à renvoyer en résultat. Je ne sais pas si je > suis clair... |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
delphi a écrit :
> Bonsoir à tous. > j'ai besoin de supprimer des espaces entre les mots dans un champ type > chaine. > je m'explique : > dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par un > ou plusieurs espaces. > je veux conserver un et un seul espace entre chaque mot. > y-a t'il une instruction sql qui fait ça ? > comment puis-je interdire plusieurs espaces (dans un édit) entre chaque > mot ? Dans le OnEditKeyPress, si le caractère tapé est un espace (#32) et que le text est non vide et que le caractère terminal de la chaîne déjà saisie est aussi un #32, on refuse le caractère (Key := #0) Ca doit donner à peu près ça : procedure MonEdit.KeyPress(var Key: Char); begin if (Key = #32) and (length(Text) <> 0) and Text[length(Text)] = #32) then Key := #0; end; JP |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
BigGrizzly a écrit :
> Sur Edit1Change, tu modifies la valeur de la propriété Text, en prenant soin > préalablement de mémoriser SelStart et SelLength, et de les restaurer après > avoir fait le nettoyage dans ta chaine... > > Pour nettoyer la chaine... Tu crées une fonction qui prend une chaine en > paramètre et qui en renvoie une autre... Si le retour de la fonction est > différent du contenu de Edit1.Text alors, tu modifies le contenu... Ca pourrait ressembler à ça : Function SupEspacesDouble(Const S:String):String; Var PLec,PEcr:PChar; Begin SetLength(Result, Length(S)); PLec:=@S; PEcr:=@Result; Repeat PEcr^:=PLec^; Case PEcr^ of #0 : Break; ' ': Repeat Inc(PLec); until PLec^<>' '; else Inc(PLec); End; Inc(PEcr); until false; SetLenght(Result, PEcr-@Result+1); End; |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
Merci à tous pour vos réponses
"delphi" <logiciel.concept@orange.fr> a écrit dans le message de news:ff2s8n$uqo$2@sd-6498.dedibox.fr... > Bonsoir à tous. > j'ai besoin de supprimer des espaces entre les mots dans un champ type > chaine. > je m'explique : > dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par un ou > plusieurs espaces. > je veux conserver un et un seul espace entre chaque mot. > y-a t'il une instruction sql qui fait ça ? > comment puis-je interdire plusieurs espaces (dans un édit) entre chaque > mot ? |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
JP Passama a écrit :
> delphi a écrit : >> Bonsoir à tous. >> j'ai besoin de supprimer des espaces entre les mots dans un champ type >> chaine. >> je m'explique : >> dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par >> un ou plusieurs espaces. >> je veux conserver un et un seul espace entre chaque mot. >> y-a t'il une instruction sql qui fait ça ? >> comment puis-je interdire plusieurs espaces (dans un édit) entre >> chaque mot ? > > Dans le OnEditKeyPress, si le caractère tapé est un espace (#32) et que > le text est non vide et que le caractère terminal de la chaîne déjà > saisie est aussi un #32, on refuse le caractère (Key := #0) > > Ca doit donner à peu près ça : > > procedure MonEdit.KeyPress(var Key: Char); > begin > if (Key = #32) > and (length(Text) <> 0) > and Text[length(Text)] = #32) > then Key := #0; > end; > > JP Oui, mais non. Là, tu supposes que le nouveau caractère va être tapé à la fin... Alors qu'il se peut que l'utilisateur complète sa chaîne par le milieu par exemple. |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
delphi wrote:
> Bonsoir à tous. > j'ai besoin de supprimer des espaces entre les mots dans un champ type > chaine. > je m'explique : > dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par un > ou plusieurs espaces. > je veux conserver un et un seul espace entre chaque mot. > y-a t'il une instruction sql qui fait ça ? > comment puis-je interdire plusieurs espaces (dans un édit) entre chaque > mot ? function DeleteConsecutiveIdenticalChars(const s: string; c: char): string; // delete all repetition of char c from string s ( ' this is a test ' -> ' this is a test ') var i: integer; begin Result:=''; for i:=1 to Length(s) do begin if (i=1) or (s[i]<>c) or (s[i-1]<>c) then Result:=Result+s[i]; end; end; eLion |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
BigGrizzly a écrit :
> JP Passama a écrit : >> delphi a écrit : >>> Bonsoir à tous. >>> j'ai besoin de supprimer des espaces entre les mots dans un champ >>> type chaine. >>> je m'explique : >>> dans un champ type varchar(40) j'ai un ou plusieurs mots séparés par >>> un ou plusieurs espaces. >>> je veux conserver un et un seul espace entre chaque mot. >>> y-a t'il une instruction sql qui fait ça ? >>> comment puis-je interdire plusieurs espaces (dans un édit) entre >>> chaque mot ? >> >> Dans le OnEditKeyPress, si le caractère tapé est un espace (#32) et >> que le text est non vide et que le caractère terminal de la chaîne >> déjà saisie est aussi un #32, on refuse le caractère (Key := #0) >> >> Ca doit donner à peu près ça : >> >> procedure MonEdit.KeyPress(var Key: Char); >> begin >> if (Key = #32) >> and (length(Text) <> 0) >> and Text[length(Text)] = #32) >> then Key := #0; >> end; >> >> JP > > Oui, mais non. Là, tu supposes que le nouveau caractère va être tapé à > la fin... Alors qu'il se peut que l'utilisateur complète sa chaîne par > le milieu par exemple. Si c'est juste pour un test final : soit S le texte issu du TEdit : while Pos(#32#32, S) <> 0 do S := StringReplace(S, #32#32, #32, [rfReplaceAll]); JP |
|
![]() |
| Outils de la discussion | |
|
|