OVH Cloud OVH Cloud

[WDx] Detexter un texte OEM : autre solution ?

7 réponses
Avatar
Georges Peyre
Bonjour,

Après avoir tatonné j'ai trouvé une solution qui a l'air de marcher,
mais je voudrais quand même avoir votre avis.

Pour savoir si le texte est OEM, je parcours ce texte caractère par
caractère pour récupérer le code décimal du caractère par
ASC(Caractere) de façon à détecter le code décimal le plus grand
contenu dans le texte.

Si le code décimal est inférieur à 136 je considère que le code du
texte est OEM sinon c'est de l'ANSI

Je teste 136 parce qu'il existe quand même un caractère 130 et un
caractère 135 qui peuvent exister en OEM.
De plus je ne tiens pas compte du code 255

Qu'en pensez-vous ?
Avez-vous mieux à me proposer ?

Cordialement




--
Elle est pas belle la vie ?

7 réponses

Avatar
Romuald.besset
Georges Peyre a écrit :
Bonjour,

Après avoir tatonné j'ai trouvé une solution qui a l'air de marcher,
mais je voudrais quand même avoir votre avis.

Pour savoir si le texte est OEM, je parcours ce texte caractère par
caractère pour récupérer le code décimal du caractère par ASC(Caractere)
de façon à détecter le code décimal le plus grand contenu dans le texte.

Si le code décimal est inférieur à 136 je considère que le code du texte
est OEM sinon c'est de l'ANSI

Je teste 136 parce qu'il existe quand même un caractère 130 et un
caractère 135 qui peuvent exister en OEM.
De plus je ne tiens pas compte du code 255

Qu'en pensez-vous ?
Avez-vous mieux à me proposer ?

Cordialement




Bonjour Georges,
La piste me semble bonne mais rien touvé en VB (ou autre) sur le sujet ?
http://www.bellamyjc.org/fr/divers.html
Il y a deux scripts (un pour chaque sens) qui devraient t'aider à
démonter les différences.

PS : si tu trascrit en WL, je te serais gréé de me faire suivre.

++ R&B
www.WDForge.org
Avatar
Georges Peyre
Bonjour,

Romuald.besset a pensé très fort :
La piste me semble bonne mais rien touvé en VB (ou autre) sur le sujet ?
http://www.bellamyjc.org/fr/divers.html
Il y a deux scripts (un pour chaque sens) qui devraient t'aider à démonter
les différences.



Ces 2 scripts posent le problème identique à celui existant dans Windev
ç'est à dire que les transpositions se font aveuglément ( voir ma
remarque du message initial )


PS : si tu trascrit en WL, je te serais gréé de me faire suivre.



PROCEDURE PDetecteOem(TaDetecter est une chaîne)
I est un entier
WCar est un caractère
WcarMax est un entier = 0

POUR I = 1 A Taille(TaDetecter)
WCar = Milieu(TaDetecter,I,1)
SI Asc(WCar) > WcarMax ALORS
SI Asc(WCar) < 255 ALORS
WcarMax = Asc(WCar)
FIN
FIN
FIN

SI WcarMax < 137
RENVOYER Vrai
SINON
RENVOYER Faux
FIN


J'utilise alors cette procédure avec la fonction Windev OemVersAnsi
de la façon suivante

SI PDetecteOem(WTexteCodeInconnu) = Vrai ALORS
TexteAffiche = OemVersAnsi(WTexteCodeInconnu)
SINON
TexteAffiche = WTexteCodeInconnu
FIN

Cordialement



--
Elle est pas belle la vie ?
Avatar
Eric
Bonjour,

Si je peux me permettre d'optimiser légèrement ta procédure :

PROCEDURE PDetecteOem(TaDetecter est une chaîne)

I est un entier
WCar est un caractère
WcarMax est un entier = 136
nbCaract est un entier = Taille(TaDetecter) // pour ne pas recalculer la
taille à chaque itération
bOEM est un booleen = Vrai

POUR I = 1 A nbCaract
WCar = Milieu(TaDetecter,I,1)
SI Asc(WCar) > WcarMax ALORS
SI Asc(WCar) < 255 ALORS
bOEM = Faux
SORTIR // pour éviter de parcourir tout le fichier si un caractère
ANSI est trouvé
FIN
FIN
FIN

RENVOYER bOEM

--
Eric
Avatar
Georges Peyre
Bonjour Eric et merci pour ta participation

Eric a présenté l'énoncé suivant :

Si je peux me permettre d'optimiser légèrement ta procédure :


Ce serait con de ne pas accepter !

WcarMax est un entier = 136


Après avoir fait d'autres essais en réalité il faut tester 159

Ceci est vérifiable si on teste par exemple le texte de l'aide issue de
la commande dos cmd.exe /C START /?



I est un entier
WCar est un caractère
WcarMax est un entier = 159
nbCaract est un entier = Taille(TaDetecter) // pour ne pas recalculer
la taille à chaque itération
bOEM est un booléen = Vrai

POUR I = 1 A nbCaract
WCar = Milieu(TaDetecter,I,1)
SI Asc(WCar) > WcarMax ALORS
SI Asc(WCar) < 255 ALORS
bOEM = Faux
SORTIR // pour éviter de parcourir tout le fichier si un caractère
ANSI est trouvé
FIN
FIN
FIN

--
Elle est pas belle la vie ?
Avatar
jacques trepp
Georges Peyre a écrit :
Bonjour Eric et merci pour ta participation

Eric a présenté l'énoncé suivant :


Si je peux me permettre d'optimiser légèrement ta procédure :



Ce serait con de ne pas accepter !

WcarMax est un entier = 136



Après avoir fait d'autres essais en réalité il faut tester 159

Ceci est vérifiable si on teste par exemple le texte de l'aide issue de
la commande dos cmd.exe /C START /?



I est un entier
WCar est un caractère
WcarMax est un entier = 159
nbCaract est un entier = Taille(TaDetecter) // pour ne pas recalculer la
taille à chaque itération
bOEM est un booléen = Vrai

POUR I = 1 A nbCaract
WCar = Milieu(TaDetecter,I,1)
SI Asc(WCar) > WcarMax ALORS
SI Asc(WCar) < 255 ALORS
bOEM = Faux
SORTIR // pour éviter de parcourir tout le fichier si un
caractère ANSI est trouvé
FIN
FIN
FIN



bonjour,
juste pour ma culture :
à quoi sert le test : SI Asc(WCar) < 255 ALORS
un asc de 1 caractère peut-t-il renvoyer une valeur >= 255 ?
...
on m'aurait menti ???




--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Georges Peyre
Bonjour Jacques,

jacques trepp avait énoncé :
Georges Peyre a écrit :
juste pour ma culture :
à quoi sert le test : SI Asc(WCar) < 255 ALORS
un asc de 1 caractère peut-t-il renvoyer une valeur >= 255 ?
...
on m'aurait menti ???



C'est parce que le caractère 255 apparait systématiquement dans les
textes ANSI ou OEM renvoyés par les commandes MSDOS et qu'il faut
l'ignorer pour que le test sur la valeur décimale 159 soit efficace.

Cordialement

--
Elle est pas belle la vie ?
Avatar
jacques trepp
Georges Peyre a écrit :
Bonjour Jacques,

jacques trepp avait énoncé :

Georges Peyre a écrit :
juste pour ma culture :
à quoi sert le test : SI Asc(WCar) < 255 ALORS
un asc de 1 caractère peut-t-il renvoyer une valeur >= 255 ?
...
on m'aurait menti ???




C'est parce que le caractère 255 apparait systématiquement dans les
textes ANSI ou OEM renvoyés par les commandes MSDOS et qu'il faut
l'ignorer pour que le test sur la valeur décimale 159 soit efficace.

Cordialement



merci,
je vais me coucher moins ... ce soir

--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com