PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 27 → text multi lignes
text multi lignes
Iniciado por eriktuz, set., 25 2022 12:00 AM - 15 respostas
Publicado em setembro, 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
Publicado em setembro, 25 2022 - 7:33 PM


Publicado em setembro, 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
Membro registado
3.197 mensagems
Popularité : +227 (347 votes)
Publicado em setembro, 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
Mensagem modificada, setembro, 25 2022 - 8:17 PM
Publicado em setembro, 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.
Membro registado
2.426 mensagems
Popularité : +93 (137 votes)
Publicado em setembro, 26 2022 - 8:50 AM
@eriktuz,
Pourrais tu, au moins fournir ton code du bouton.
Membro registado
3.197 mensagems
Popularité : +227 (347 votes)
Publicado em setembro, 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
Mensagem modificada, setembro, 26 2022 - 9:59 AM
Publicado em setembro, 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
Membro registado
2.426 mensagems
Popularité : +93 (137 votes)
Publicado em setembro, 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.
Membro registado
3.197 mensagems
Popularité : +227 (347 votes)
Publicado em setembro, 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
Mensagem modificada, setembro, 27 2022 - 8:52 AM
Publicado em setembro, 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(`
Membro registado
3.197 mensagems
Popularité : +227 (347 votes)
Publicado em setembro, 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
Publicado em setembro, 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
Membro registado
3.197 mensagems
Popularité : +227 (347 votes)
Publicado em setembro, 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
Publicado em setembro, 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




Publicado em setembro, 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