PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → text multi lignes
text multi lignes
Started by eriktuz, Sep., 25 2022 12:00 AM - 15 replies
Posted on September, 25 2022 - 12:00 AM
salut

j'avais 2 sai saisie ( text multi ligne )

la premier contient des lignes en hexadecimal , et dans la dousiem je veut convertir saisaisie (1) en buffer dans saisaisie (2) mais pour tout les lignes

j'ai essaie plusieur code mais toujour convert la premier ligne seulment
Posted on September, 25 2022 - 7:33 PM


Posted on September, 25 2022 - 7:35 PM
eriktuz a écrit :
salut

j'avais 2 sai saisie ( text multi ligne )

la 1er contient des lignes en hexadecimal , et dans la 2em je veut convertir saisaisie (1) en buffer dans saisaisie (2) mais pour tout les lignes

j'ai essaie plusieur code mais toujour convert la premier ligne seulment
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on September, 25 2022 - 8:07 PM
Bonjour,
eriktuz a écrit :
j'ai essaie plusieur code mais toujour convert la premier ligne seulment

Lesquels ?

La fonction suivante devrait faire l'affaire :
FONCTION HexaVersTexte(saChaineHexa) :chaîne
nOffset est un entier
saResultat est une chaîne

POUR nOffset=1 _À_ Taille(saChaineHexa) PAS 2
saResultat=ChaîneConstruit("%1%2",saResultat,Caract(Val(saChaineHexa[[nOffset SUR 2]],"x")))
FIN
RENVOYER saResultat


--
Il y a peut être plus simple, mais, ça tourne
Message modified, September, 25 2022 - 8:17 PM
Posted on September, 25 2022 - 8:42 PM
merci pour votre aide mais ca marche pas j'ai recu léerreur suivante:

Les paramètres d'appel du code 'Clic sur BTN_SansNom2' sont incorrects : on attendait 1 paramètres et on en a reçu 0.
Registered member
3,311 messages
Popularité : +93 (137 votes)
Posted on September, 26 2022 - 8:50 AM
@eriktuz,
Pourrais tu, au moins fournir ton code du bouton.
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on September, 26 2022 - 9:56 AM
eriktuz a écrit :
merci pour votre aide mais ca marche pas j'ai recu léerreur suivante:

Les paramètres d'appel du code 'Clic sur BTN_SansNom2' sont incorrects : on attendait 1 paramètres et on en a reçu 0.

Si tu ne passes pas la chaine à transformer, c'est sûr, tu auras toujours cette erreur.
Par ailleurs (nos post ont du se croiser,) si l'espace entre 2 octets n'est pas un espace de mise en forme, il faudra remplacer
PAS 2

par
PAS 3


--
Il y a peut être plus simple, mais, ça tourne
Message modified, September, 26 2022 - 9:59 AM
Posted on September, 26 2022 - 7:20 PM
MEME PROBLEM

FONCTION HexaVersTexte(SAI_Texte1) :chaîne
nOffset est un entier
saResultat est une chaîne

POUR nOffset=1 _À_ Taille(SAI_Texte1) PAS 2
saResultat=ChaîneConstruit("%1%2",saResultat,Caract(Val(SAI_Texte1[[nOffset SUR 2]],"X")))
SAI_Texte2 = saResultat
FIN
RENVOYER saResultat
Registered member
3,311 messages
Popularité : +93 (137 votes)
Posted on September, 27 2022 - 7:21 AM
eriktuz a écrit :
MEME PROBLEM

FONCTION HexaVersTexte(SAI_Texte1) :chaîne
nOffset est un entier
saResultat est une chaîne

POUR nOffset=1 _À_ Taille(SAI_Texte1) PAS 2
saResultat=ChaîneConstruit("%1%2",saResultat,Caract(Val(SAI_Texte1[[nOffset SUR 2]],"X")))
SAI_Texte2 = saResultat
FIN
RENVOYER saResultat

Si ce code est a l'intérieur du bouton c'est normal que ça ne fonctionne pas
Tu dois plutôt écrire
Machaine est une chaîne
Machaine = HexaVersTexte(SAI_Texte1)
SAI_Texte2 = Machaine

Puis tu créer la procédure HexaVersTexte
Avec le code de Voroltinquo

Sans abuser , il serait souhaitable de suivre l'autoformation proposé par pcsoft.
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on September, 27 2022 - 8:30 AM
On peut même améliorer le code en travaillant directement sur le buffer.
Code du bouton :
bufFichier est buffer

bufFichier=fChargeBuffer'(SAI_Fichier)
SAI_Hexa=BufferVersHexa(bufFichier)
SAI_Texte=BufferVersTexte(bufFichier)

BufferVersTexte:
FONCTION HexaVersTexte(bufMonBuffer) :chaîne
nOffset est un entier
saResultat est une chaîne

POUR nOffset=1 _À_ Taille(bufMonBuffer) PAS 2
saResultat=ChaîneConstruit("%1%2",saResultat,Caract(Val(bufMonBuffer[[nOffset SUR 2]],"x")))
FIN
RENVOYER saResultat


Remarque : Il faut éventuellement penser à vérifier le type de codage de texte (UTF 8, UTF 16 (UNICODE pour Windev,) UTF 32) en vérifiant l'existence du BOM (Bit Order Mark, Indicateur d'ordre doctets en français) et son type (little endian,, big endian)

Remarque 2 : La plupart des caractères de contrôle (00 à 0x1F) seront affiché en tant que rectangle sauf
00 (un espace,)
09 (Tabulation)
0A0D (Passage à la ligne et retour en début de ligne)
0C
1B (Pas d'affichage,)
Pour les plus courants


--
Il y a peut-être plus simple, mais, ça tourne
Message modified, September, 27 2022 - 8:52 AM
Posted on September, 27 2022 - 5:08 PM
Merci mon frere

dans le button :

bufFichier est Buffer

bufFichier = fChargeBuffer (SAI_Fichier)
SAI_Texte1 = BufferVersHexa(bufFichier)
SAI_Texte2 = HexaVersTexte(bufFichier)

et je criée une procedure locale avec le code:

FONCTION HexaVersTexte(bufMonBuffer) :chaîne
nOffset est un entier
saResultat est une chaîne

POUR nOffset=1 _À_ Taille(bufMonBuffer) PAS 2
saResultat=ChaîneConstruit("%1%2",saResultat,Caract(Val(bufMonBuffer[[nOffset SUR 2]],"x")))
FIN
RENVOYER saResultat


pour le hexa est tres bien mais pour le buffer je recu une seul ligne comme ca:

vF(`
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on September, 28 2022 - 9:00 AM
De mon côté ça fonctionne.
Comme je l'expliquais plus haut, cela peut toutefois provenir des caractères de contrôle (e.g. 0x04 :EOT, 0x08 : BS, 0x24: Cancel) qui ne sont pas toujours affichables ou peuvent être interprétés comme tels.
1-Que renvoie
Taille(SAI_Texte2)

2-Une solution peut être de remplacer ces caractères par un caractère affichable (généralement le . (0x2E))
A la volée :
FONCTION HexaVersTexte(bufMonBuffer) :chaîne
nOffset est un entier
saResultat est une chaîne
cCaractèreLu est caractère

POUR nOffset=1 _À_ Taille(bufMonBuffer) PAS 2
cCaractèreLu=Caract(Val(bufMonBuffer[[nOffset SUR 2]],"x"))
SI cCaratèreLu<0x40 ALORS
cCaractèreLu=0x2E
FIN
saResultat=ChaîneConstruit("%1%2",saResultat,cCaractèreLu)
FIN
RENVOYER saResultat


--
Il y a peut être plus simple, mais, ça tourne
Posted on September, 28 2022 - 3:13 PM
OK
maintenant voici le resultat :






mais le corecte resultat ( que je souhaite ) est:






EST le fichier bin pour test est:

https://filebin.net/archive/hdha87a6p42fs1tm/zip

tu peut essayer avec hexa editor pour voir la deferrence
Registered member
3,844 messages
Popularité : +227 (347 votes)
Posted on September, 28 2022 - 7:45 PM
Le problème venais de la transformation du paramètre de la fonction BufferVersHexa de chaine en buffer.
Il faut traiter un élément comme un octet et non comme 2 caractères (e.g pour un variable chaine "37" c'est 2 caractère alors que pour un buffer c'est un numérique)
Le code suivant prend en compte ce changement de type
FONCTION BufferVersTexte(bufFichier est un Buffer) :chaîne
nOffset est un entier
saResultat est une chaîne
ocCaractèreLu est octet

POUR nOffset=1 _À_ Taille(bufFichier)
ocCaractèreLu=bufFichier[[nOffset]]

SI ocCaractèreLu<0x20 ALORS
ocCaractèreLu=0x2E
FIN
saResultat=ChaîneConstruit("%1%2 ",saResultat,Caract(ocCaractèreLu))
FIN
RENVOYER saResultat


--
Il y a peut être plus simple, mais, ça tourne
Posted on September, 28 2022 - 8:21 PM
Trés tres bien Mr Voroltinquo vous etes genie
le code est marche trés bien ... just un seul problem il ya une espace entre les octes ..comment eviter cette espace




Posted on September, 28 2022 - 8:30 PM
OK OK

LE problem de l'espace est regler juste remove l'espace apres ( "%1%2) est manitenant tout va bien

UN GRAND MERCI Monsieur :merci::merci::D:D