Conversion en String un ensemble Set

Résolu
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 26 avril 2007 à 09:59
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 28 avril 2007 à 13:42
salut,
   j'ai un souci sur une parti de ma prog, j'ai effectué un test de caractère non autorisé (qui fonctionne très bien !) mais je n'arrive pas à faire apparaitre la liste dans un showmessage
voici mon extrait de code concerné :

Const
  TabInterdit =  [':','/','\','?','>','<','*','"','|'];
var
   j : Integer;
begin
   for j := 1 to Length(Edit1.Text) do
        if (Edit1.Text[j] in TabInterdit) then
        Showmessage('Le nom de l''image '+TabEdit[i].Text+
                    ' ne peut contenir les caractères spéciaux suivants :'+#13
                    //+ là je veux lister les caractères TabInterdit
                    );
end;

11 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 48
26 avril 2007 à 15:15
Salut,

Voici un exemple simple pour afficher le contenu du Set
procedure TForm1.Button1Click(Sender: TObject);
Const
  TabInterdit  =   [':','/','\','?','>','<','*','"','|'];
var
   I      : Integer;
   StrSet : String;
begin
  For I : = 0 to 255 do
   If Chr(I) in TabInterdit Then  StrSet := StrSet + Format('''%s'' ', [Chr(I)]);
        ShowMessage('Le nom de l''image ne peut contenir les caractères spéciaux suivants :' + StrSet);
end ;

Voilà à toi de l'adapter a tes besoins
 
@+
Cirec

<hr size ="2" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
27 avril 2007 à 02:39
tite correction  :

procedure TForm1.Button1Click(Sender: TObject);
Const
  TabInterdit = [':','/','\','?','>','<','*','"','|'];
var
   I        : Integer;
   S,StrSet : String;
begin
  S      := Edit1.Text;
  StrSet := '';
  for I := 1 to Length(S) do
    If S[I] in TabInterdit Then
      StrSet := StrSet + S[I];
  if Length(StrSet) <> 0 then
    ShowMessage('Le nom de l''image ne peut contenir les caractères spéciaux suivants :' + StrSet);
end;

<hr size="2" width="100%" />Croc (click me)
3
moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008
26 avril 2007 à 11:49
Salut,

Si le code est identique à ce que tu a posté c'est normal que ca marche pas car dans ton ShowMessage tu a mis TabEdit[i].Text alors que tu a beaucoup plus simple, vu que le caractère qui est interdit est celui testé dans l'Edit1 tu peux faire :

ShowMessage('Le nom de l''image ne peut contenir la caractère suivant : '+Edit1.Text[i])

Ensuite tu met ta fonction dans le Edit1KeyPress et voila le tour est joué.

Bonne Prog
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
26 avril 2007 à 13:59
salut,

pour afficher juste un message d'erreur pour le char tapé, fait comme moldov t'as dit. C'est super simple.
(detail: t'as un problem entre i vs j)

pour afficher TOUT le set, je ne connais aucun moyen simple. Si j'étais a ta place, je ferrais juste une const string (comme ça t'as les virgule et tout).

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

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

Posez votre question
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
26 avril 2007 à 18:43
salut lova, 
   merci pour ta remarque mais pour le KeyPress, cela neme donnait pas le résultat désiré et aurait été lourd à la longue, je pense car si à chaque fois que l'on frappe un touche interdite un message apparait voilà quoi !!

salut moldov,
   comme tu vois il y a un moyen simple proposé par cirec auquel on aurait pu éventuellement penser a cela mais il en est ainsi !
merci tout de même d'avoir répondu à mon message !!

salut cirec, 
   c'est super, je te  remercie
C'est exactement ça qui me fallait, tu me sauves !! merci encore !
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
27 avril 2007 à 09:31
re,

je suis bien d'accord, les messagebox qui te coupe la saisie: c'est pénible....

pour gérer des erreurs de saisie, je recommande (à  mon humble avis):
1. une correction le plus automatique possible
2. une message d'erreur clair (pour comprendre la correction auto)
3. des message d'erreur non "interrompant".

le point trois peut se réaliser de plusieurs manières:

3.a une console d'erreur (ie: un memo à alBottom)
3.b l'affiche d'un label en rouge en dessous de la zone de saisie.
3.c une  fenêtre "stayOnTop" de petit taille qui se position près de la zone de saisie. tu la fait apparaître lors de l'erreur et disparaître lorsque la saisie est corrigée. Un genre de bull d'info. avec la transparence et une jolie image de fond, t'arrive à faire qqch de très jolie. En plus, tu peux ajouter de l'interactivité (bouton d'aide, liens vers site web, ...)

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
27 avril 2007 à 15:26
Salut,

Moi, je ferais simplement:


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 If Key in [':','/','\','?','>','<','*','"','|'] then Key := #0;
end;

Je pense qu'il est inutile de prévenir l'utilisateur de sa petite distraction... 
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
27 avril 2007 à 15:41
Quoique...

Si c'est un prog pour débutant de Papouasie, il vaut peut-être mieux lui indiquer l'erreur...
Ce sera plus didactique. 
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
27 avril 2007 à 16:03
...Enfin, j'ai rien contre les Papous.
Mais on n'en voit pas beaucoup traîner sur CS...

On se demande bien ce qu'ils peuvent bien foutre de leur journée...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
28 avril 2007 à 10:05
Chez les papous y'a des papous papa et des papous pas papa. Mais
chez les papous il y a aussi des poux, donc chez les papous y'a des papous
papa à poux, des papous papa pas à poux, des papous pas papa
à poux et des papous pas papa pas à poux. Chez les poux il
y a des poux papa et des poux pas papa. Alors chez les papous, y'a-til
des papous papa à poux papa, des papous papa à poux pas papa,
des papous papa pas à poux papa, des papous papa pas à poux
pas papa, des papous pas papa à poux papa, des papous pas papa à
poux pas papa, des papous pas papa pas à poux papa et des papous
pas papa pas à poux pas papa






<hr size="2" width="100%" />
Croc (click me)
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
28 avril 2007 à 13:42
... Je confirme.

Par contre, je précise que ça marche pas pour la papoute.
"La papoute à pouxe maman" provoquant un msg d'erreur.

Et je rappelle à  gabs77 de ne pas oublier la touche "réponse acceptée"...
0