Instruction IN avec un String possible?

Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
4 septembre 2008
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
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

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
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
Messages postés
77
Date d'inscription
lundi 17 octobre 2005
Statut
Membre
Dernière intervention
4 septembre 2008

Merci, je vais donc faire cela
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
38
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>