PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → text multi lignes
text multi lignes
Débuté par eriktuz, 25 sep. 2022 00:00 - 15 réponses
Posté le 25 septembre 2022 - 00:00
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
Posté le 25 septembre 2022 - 19:33


Posté le 25 septembre 2022 - 19:35
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
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 25 septembre 2022 - 20:07
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 modifié, 25 septembre 2022 - 20:17
Posté le 25 septembre 2022 - 20:42
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.
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 26 septembre 2022 - 08:50
@eriktuz,
Pourrais tu, au moins fournir ton code du bouton.
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 26 septembre 2022 - 09:56
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 modifié, 26 septembre 2022 - 09:59
Posté le 26 septembre 2022 - 19:20
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
Membre enregistré
3 311 messages
Popularité : +93 (137 votes)
Posté le 27 septembre 2022 - 07:21
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.
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 27 septembre 2022 - 08:30
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 modifié, 27 septembre 2022 - 08:52
Posté le 27 septembre 2022 - 17:08
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(`
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 28 septembre 2022 - 09:00
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
Posté le 28 septembre 2022 - 15:13
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
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 28 septembre 2022 - 19:45
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
Posté le 28 septembre 2022 - 20:21
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




Posté le 28 septembre 2022 - 20:30
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