Caractères grecs en VB4 ?

whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011 - 5 mars 2006 à 03:12
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 8 mars 2006 à 17:02
Bonjour,
Je travaille en VB4 et j'ai besoin de manipuler des chaines en caractères grecs (Majuscules, minuscules, etc...)
VB4 n'écrit, dans un fichier, que des caractères bizarres, preuve qu'il ne sait pas lire l'Unicode.
Ce doit être pareil avec le cyrillique, l'arménien ou l'hébreu.
Comment faire ?
Merci d'avance pour votre aide.
Richard

6 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
5 mars 2006 à 16:53
Utiliser un RichTextBox non !?

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
6 mars 2006 à 05:47
C'est une idée mais je dois travailler sur des fichiers, soit des fichiers texte avec Input et Output soit en Random avec déclaratuion de type.
C'est là que ça coince. Il faudrait que j'arrive à lire l'Unicode en VB4...
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
6 mars 2006 à 17:01
Attend, là y'a un truc que t'a pas du bien comprendre... Dans les fichiers ne sont enregistré que des octects !!! Comme tu le sais, 1 octet = 8 bits (1 bit : 0 ou 1) ce qui donne, avec 8 bits, que 256 octets différents (de 0 à 255). Pour représenter ces octets on a créer des caractères dit ASCII (cf. Google pour plus d'infos). Donc, les fichiers - qui ne sont composés que d'une suite d'octets -, lorsqu'ils sont ouverts avec un éditeur de texte tout simple (p.ex. le bloc-note), n'affichent que des caractères ASCII.

Donc, dans le cas d'un texte simple (non Unicode), les octets sont les lettres du texte (formuler simplement!) car chaque lettre est, dans ce cas, codé sur un seul octet !
Mais dans le cas de l'Unicode, les caractères ne sont pas codés sur 1 octet mais 2 octets. Autrement dit, chaque "glyphe" a un numéro de 16 bits (2 octets) l'identifiant. Pourquoi ? Tout simplement parce qu'en codant un glyphe sur 1 octet (8 bits) on ne peut avoir que 256 glyphes différents alors qu'en codant les glyphes sur 2 octets (16 bits) on peut en avoir 65'536 différents ! Or, il se trouve qu'on ne peut pas, avec seulement 256 glyphes, représenter tous les glyphes de toutes les langues de la planète !!!

Bref, tout ça pour dire qu'un texte unicode ne sera jamais lisible tel-quel avec un simple éditeur de texte car chaque glyphe (caractère interprétable) sera codé sur 2 octets et donc, représenté par 2 caractères ASCII !

Donc... IL FAUT UN LECTEUR DE TEXTE UNICODE pour lire les fichiers Unicode. Il y a fondamentalement que 2 lecteurs de texte Unicode livrés avec Windows et VB (donc, de base... car il en existe surement d'autres!!!) :
- le navigateur de Internet Explorer : à partir de la version 5 me semble-t-il et à condition d'avoir installé tous les glyphes (via la prise en charge de la gestion multilingue de IE). Ne permet que la lecture.
- Le RicheTextBox (RTB) : il permet la lecture et, je crois, l'enregistrement de fichiers Unicode et (RTF biensûr).

D'où ma précédente réponse!!! : Utiliser un RTB.

Je te rappele, au cas où tu ne le serais pas déjà, que pour insérer un RTB dans ton projet il faut aller dans le menu Projet > Composants > sélectionner le composant à lier au projet (en l'occurrence Microsoft Rich...) puis dessiner le contrôle ActiveX sur la feuille.

Est-ce plus clair ou toujours pas ???

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
7 mars 2006 à 03:41
Bon, là c'est clair mais je ne savais pas que seul le RichTextBox pouvait lire de l'unicode.
J'espérais une API ou savoir utiliser strConv [ StrConv(String, 64) ou StrConv(String, 128) ].
Parce que là... Comment je fais pour manipuler les chaines d'un fichier ? Il me faudrais mettre le controle RTB en invisible et jouer avec RTB_Change, chercher avec instr les occurences de chr(13), etc...
Une usine à gaz, non ?
0

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

Posez votre question
whombat Messages postés 188 Date d'inscription mercredi 12 octobre 2005 Statut Membre Dernière intervention 19 novembre 2011
7 mars 2006 à 03:50
Encore un mot :
J'ai trouvé deux APIs, dont une renvoi le texte en ASCII et l'autre en Unicode.
Il semblerait que ces 2 fonctions : GetStrFromPtrW et GetStrFromBufferA soient la solution. Mais je ne sais pas comment m'en servir.
Z'auriez une idée ?
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
8 mars 2006 à 17:02
Aide toi de API-Guide (et API-Viewer) [http://www.AllAPI.Net] et de ProgOtop [http://www.progotop.com] (de DarkSidious) pour plus d'infos sur les APIs et leur utilisation.

Mais... il me semble qu'il y a déjà des fonctions VB qui traitent les chaines UNICODE... Je n'ai plus en tête le détail mais je crois que si tu rajoutes un "B" ou un "$" dérrière certaines fonctions de traitement de chaines telles que CHR, le traitement varie... Regarde ce qu'en dit la MSDN (l'aide du VB)... Par exemple, Chr(x) n'est pas pareil que Chr$(x) et que ChrB(x), ...

Mais je te le redis, il n'y a pas QUE le RTB pour lire l'unicode!!! Le contrôle de navi de IE le fait aussi, Word aussi le fait et il doit exister bon nombre d'autres contrôles pour faire ça!!!

Tu peux parfaitement manipuler le RTB via des sélects et cie ! Et je crois même qu'il n'est null besoin d'utiliser des fonctions telles que Replace car, me semble-t-il, le RTB a déjà bon nombre de Méthodes (fonctions internes aux objets...) faisant ce genre de manipulations...

Bref, c'est pas si compliqué et je ne suis pas certain que l'utilisation d'API soit vitale - si ce n'est pour la vitesse - si ton programme reste modeste!

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Rejoignez-nous