utilisation de in ['A'..'Z','a'..'z'] dans delphi [Résolu]

Signaler
Messages postés
25
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
12 janvier 2006
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Je vais poser la question autrement :

// cDonne est déclarée :
var cDonnee : string;
// cCar est déclarée :
var cCar : char;
//A un moment, cDonnee contient la chaîne 'DISK 1'

// Dans le code j'ai
cCar := copy(cDonnee, 6, 1);

if cCar IN ['1'..'9'] then showmessage('ok');
// cette dernière ligne me donne l'erreur suivante
[Erreur] UnitImport.pas(121): Types incompatibles : 'Char' et 'String'

QUELLE PEUT ETRE LA SOLUTION ?
Merci par avance
Jean-Louis / jean.louis.paul@wanadoo.fr

10 réponses

Messages postés
135
Date d'inscription
jeudi 14 août 2003
Statut
Membre
Dernière intervention
12 octobre 2006

Ce n'est pas la derniere ligne qui te donne l'erreur a mon avis, mais plôt cCar := copy(cDonnee, 6, 1);

essais de la remplacer par cCar:=cDonnee[6];


bouh
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

remplace cCar := copy(cDonnee, 6, 1); par cCar := cDonnee[6]; et ton
probleme szra resolu. Mais il me semble que FLORENTH t'avais deja donne
la solution.

une seule restriction length( cDonnee) doit etre superieur a 6 sinon tu auras une erreur d'execution.

FLORENTH si tu regarde ce post cCar := copy(cDonnee, 6,
1);provoque une erreur de compilation Types incompatibles : 'Char' et
'String'



bonne prog;
Messages postés
28
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
24 juillet 2009

salut,

et si tu remplaçais var cCar : char par var cCar : string; d'autre part comme la signlé jlen100, il faut que la longueur de ton text soit au minium égale à 6
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
mimiGMT tu ne peux pas utiliser un string avec l'operatuer d'ensemble
IN puisqu'il n'admet que des scalaires or un type string n'est pas un
scalaire. Il faut donc faire un transtypage.
Messages postés
28
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
24 juillet 2009

Je développe sous Delphi4 et il est très fréquent que j'utilise ceci

If Qry.FieldByName('etat').AsString[1] in ['J', 'S', 'A'] then
begin
-----
end;

Cela fonctionne très bien, je ne comprends pas ce que je fais de pas bien.

MimiMgt
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
mimiGMT, dans le code que tu donnes ça fonctionne car ...AsString[1] n'est pas une chaine mais un caractere de la chaine AsString tu as donc transtype ta chaine en scalaire. Par contre tu ne peux pas faire AsString in [...] CQFD.
Messages postés
28
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
24 juillet 2009

J'ai compris, merci.
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
pas de quoi
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Un rapide coup d'oeil dans l'aide en ligne à propos de la fonction Copy :

functionCopy(S;Index,Count:Integer):string;
functionCopy(S;Index,Count:Integer):array;

Aucune des deux déclarations ne renvoyant un type scalaire, il faut donc transtyper le résultat en Char.
JLen100 a raison quand il dit qu'il vaut mieux que la chaine ait au moins 6 caractères :
if Length(CDonnee) >= 6 then
cCar : = cDonnee[6]
else
cCar := '0';
if cCar IN ['1'..'9'] then showmessage('ok');

<HR color =#008000>



Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
jlp_alexandre : MERCI DE NE PAS POSER PLUSIEURS FOIS LA MÊME QUESTION DANS LE FORUM
Au lieu de cela, lire les réponses données par les membres et ...

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