Instruction IN avec un String possible?

cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 6 mars 2006 à 10:13
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 6 mars 2006 à 23:51
Bonjour,
je voudrais savoir si il est possible de faire un string la même chose qu'un char?
je m'explique par un exemple:
avec un char (Key) on peut écrire: if Key in ['a','d','1','3'] then .....
Je voudrais faire la même chose mais avec un string (Machine)
Ex: if Machine in ['37','39','50','12'] then .....
Seulement ça ne marche pas car il demande un type ordinal. Y a t-il un moyen d'écrire la même chose mais en evitant de devoir écrire
if (machine='37') or (machine='39') or (machine='50') or (machine='12') or (etc....) then
ce qui est long et pas facilement lisible. Je préfèrerais écrire "si la machine est dans la liste alors"

ma question est peut être bête, mais pour l'instant la solution ne me saute pas aux yeux.

Merci

6 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
6 mars 2006 à 10:43
salut,

les ensemble n'acceptent que des saclaires : char, byte,integer....

tu ne peux donc pas déclarer d'ensemble tel que :['37','39','50','12']

il faudra passer par des instructions if then



@+

jlen
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
6 mars 2006 à 10:52
Merci, je vais donc faire cela
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 12:59
Salut,
voici une petite ruse de sioux :

procedure TForm1.Button1Click(Sender: TObject);
begin
If StrToIntDef(Machine, -1) in [37, 39, 50, 12] Then ShowMessage('Ok');
end;

Avec StrToIntDef si Machine n'est pas valide il renvoie -1 et donc ne déclanche pas d'erreur ;

@+
Cirec
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
6 mars 2006 à 13:42
Alors là, franchement, Cirec tu m'épates !
Je ne connaissais pas cette astuce


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

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

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
6 mars 2006 à 14:55
Venant de toi je suis flatté, j'ai bien mis dix minutes à m'en remettre, sans compter les chevilles qui ont doublées de volumes

@+
Cirec
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 mars 2006 à 23:51
on peu egalement faire cela :

function MachineValidator(machine : string) : boolean;
var x : integer;
const machinevalidname : array[0..4] of string = ('10','20','AB','XR,'54');
begin
result := false;
if machine = '' then exit;
for x := low(validemachinename) to high(validmachinename) do begin
if machine = validmachinename[x] then begin
result := true;
exit;
end;
end;
end;

mais c'est un code, bien que rapide sur des petits tableaux, serat longue sur de gros tableau (+ de 500 elements).

autre astuces un peu moins lourde :

function MachineValidator(machine : string) : boolean;

var x : integer;

const machinevalidname : string = ('#10#20#AB#XR#54#');

begin

result := false;

if machine = '' then exit;
if pos('#'+machine+'#',validmachinename) <> 0 then begin
result := true;
end;
end;

<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
0
Rejoignez-nous