Ce sujet est résolu.
1 | |||||
Auteur | Messages | ||||
---|---|---|---|---|---|
siscard06 | #1 Posté le 7/6/2012 à 16:51:24 | ||||
Bonjour, Je poursuis d'un petit pas l'avancement de mon projet d'afficheur de balance via RS232. Puisque le problème de l'affichage en soi est réglé, reste celui de ce caractère caché qui me fractionne cet affichage en 2 temps : -0.12 puis 3 kg N qui vient par dessus et masque la première partie. Le problème ne se pose pas dans une Textarea puisque là, seuls s'affichent les caractères "imprimables" J'ai donc fait afficher dans la textbox le code ASCII de tous les caractères entre la 7° et la 10° position ainsi que la longueur de la chaine : Textbox1.Text = Asc(Poids,7) & " " & Asc(Poids,8) & " " & Asc(Poids,9) & " " & Asc(Poids,10), et j'obtiens, toujours en 2 temps, une valeur 0 en 9° position, pour les autres, la valeur est normale et correspond bien à un chiffre ou un espace (32). J'ai essayé la fonction Replace$(Poids, Chr$(0), "") sans succès. J'ai essayé aussi de faire Pds = Left(Poids,8) & Right(Poids, 10) sans succès non plus. J'ai essayé aussi de récupérer seulement les chiffres en tant que valeur numérique, mais il y a toujours ce Chr$(0) au milieu. Il faudrait donc que j'essaie de créer une fonction comme Trim(), mais qu'elle s'applique à l'intérieur de la chaîne et pas seulement aux extrémités (on peut éventuellement garder les espaces Chr$(32)). Si quelqu'un peut m'expliquer comment fonctionne Trim, je pourrais essayer de l'appliquer à chaque tronçon de la chaîne, voire caractère par caractère; il s'agirait d'éliminer tous les caractères dont le code < 32 ou =127 (OU alors il faut peut-être travailler avec les codes UTF8) Ou alors, j'ai trouvé ça dans Wikipedia/wiki/Commandes_Unix : strings : Affiche seulement les caractères imprimables (ASCII) d'un fichier binaire. Est-ce qu'il existe quelque chose de similaire dans Gambas ou comment éxécuter cette commande dans Gambas, si elle existe dans Ubuntu (11.04) ou dans Linux (http://jp.barralis.com/linux-man/man3/string.3.php, pas très explicite) Merci d'avance. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||
Fly06 | #2 Posté le 7/6/2012 à 21:50:33 | ||||
Salut, Essayes d'utiliser le composant Regexp : http://gambasdoc.org/help/comp/gb.pcre/regexp?fr En construisant un regex qui supprime les caractères non imprimables ou un regex qui ne conserve que les caractères imprimables de ta chaîne (au choix) : http://gambasdoc.org/help/doc/pcre?fr Sur la syntaxe des expressions régulières PCRE, il y a tout plein d'infos et de tutos sur le web. | |||||
Reivillo | #3 Posté le 7/6/2012 à 23:35:32 | ||||
C' est ici, et nul part ailleurs. « Et pis c'est tout ! » | Bonsoir siscard06. Ton sujet m' intéresse. 1: Si tu pouvais enregistrer dans un fichier BRUT, on pourrait l' analyser avec un Editeur Hexadecimal. 2: Parfois une capture d'écran(on n'y pense pas toujours), est source de facilité de solutions. Reivillo. Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015) LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr LÀ. Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous... sudo add-apt-repository ppa:gambas-team/gambas3 sudo apt-get update sudo apt-get install gambas3 -y Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016) Pour la Doc, c'est vers là: Documentation Gambas3 FR | ||||
siscard06 | #4 Posté le 8/6/2012 à 15:14:49 | ||||
Bonjour et merci, @ Fly06 Piste intéressante à étudier, mais je connais pas encore "Regex", et je ne comprends pas très bien la notion de "classes", ça viendra sans doute à l'usage (objets et fonctions, c'est à peu près clair). Je la mets de côté pour le moment; mais si tu peux me donner quelques indications de plus sur ton idée... (PS t'es dans quel coin du 06, moi c'est Levens, dans les collines au dessus de Nice) @ Revillo 1- Si tu pouvais enregistrer dans un fichier BRUT, (Ouais, pourquoi pas, ça confirmerai si c'est bien un chr$(0), ou si c'est un autre code interprété comme tel). Piste intéressante aussi, il faut que j'apprenne à mettre un string dans un file, ça à l'air moins dur, mais après je le mets où ? directement dans ton mail ? 2: Parfois une capture d'écran(on n'y pense pas toujours), Ouais, j'ai aussi installé desktop recorder y a pas longtemps OK, c'est pas Gambas qui est compliqué, c'est mon problème qui est un peu coton pour débuter ! Ca fait 4 pistes à essayer. je vous poste les résultats ici. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||
Reivillo | #5 Posté le 8/6/2012 à 17:33:26 | ||||
C' est ici, et nul part ailleurs. « Et pis c'est tout ! » | Merci pour la correction orthographique. Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015) LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr LÀ. Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous... sudo add-apt-repository ppa:gambas-team/gambas3 sudo apt-get update sudo apt-get install gambas3 -y Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016) Pour la Doc, c'est vers là: Documentation Gambas3 FR | ||||
siscard06 | #6 Posté le 9/6/2012 à 17:26:57 | ||||
Pas de quoi, Reivillo J'ai le correcteur d'orthographe omniprésent même que c'en est cassec...(bonbons) 1° essai (je vous mets pas l'ouverture avant et la fermeture après pour gagner de la place) Public Sub SPort_Read() Dim Poids, Pds As String Poids = Read #SPort, Lof(Sport) Exec ["strings", "Poids"] To Pds TextBox1.Text = Pds End N'affiche rien du tout. Erreur de syntaxe ? Il faudrait que je teste la fonction en mode console pour voir si ça fonctionne. 2° Essai Public Sub SPort_Read() Dim Poids, Pds As String Dim I As Integer Poids = Read #SPort, Lof(Sport) For I = 1 To 15 If Asc(Poids, I) > 31 And Asc(Poids, I) < 127 Then Pds = Pds & Mid(Poids, I, 1) Endif TextBox1.Text = Pds Wait 1 Next End (J'ai mis le Next de la boucle après l'affichage et le Wait pour voir comment ça se passait au ralenti) Toujours affichage en 2 temps, le caractère récalcitrant est toujours là. Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||
Reivillo | #7 Posté le 10/6/2012 à 01:32:12 | ||||
C' est ici, et nul part ailleurs. « Et pis c'est tout ! » | Peut-être avec cet exemple. (Si bien compris le soucis). Désolé pour l'aspect du code. Les Balise, me le tronque. Public Sub _new() Dim sCr As String = "CaractèreRécalcitrant" 'Création chaîne Test Print sCr 'Affiche chaîne Test sCr = "Caractère" & Chr$(9) & "Récalcitrant" 'Insertion du caractère 9 Print sCr 'Affiche chaîne après Insertion du caractère 9 'ci-dessous suppression du Caractère 9 sCr = Mid$(sCr, 1, InStr(sCr, Chr$(9)) - 1) & Mid$(sCr, InStr(sCr, Chr$(9)) + 1, Len(sCr)) Print sCr 'Affiche après suppression du Caractère 9 End Nb: Le Caractère ascii 9 = Tabulation. Poids = Read #SPort, Lof(Sport) Poids = Mid$(Poids, 1, InStr(Poids, Chr$(9)) - 1) & Mid$(Poids, InStr(Poids, Chr$(9)) + 1, Len(Poids)) TextBox1.Text = Poids Avec un point décimal à la place du 9: Poids = Mid$(Poids, 1, InStr(Poids, Chr$(9)) - 1) &"."& Mid$(Poids, InStr(Poids, Chr$(9)) + 1, Len(Poids)) 1° essai Dans l'Exec, peut-être Supprimer les guillemets autour de Poids. C'est une Variable, pas du Texte. Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015) LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr LÀ. Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous... sudo add-apt-repository ppa:gambas-team/gambas3 sudo apt-get update sudo apt-get install gambas3 -y Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016) Pour la Doc, c'est vers là: Documentation Gambas3 FR | ||||
Reivillo | #8 Posté le 10/6/2012 à 07:23:06 | ||||
C' est ici, et nul part ailleurs. « Et pis c'est tout ! » | En code Optimisé. Ici le code s'affiche bien.
Essayer ceci aussi, en remplaçant les lignes 7 et 8 Par
Merci de me faire un retour de résultat. Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015) LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr LÀ. Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous... sudo add-apt-repository ppa:gambas-team/gambas3 sudo apt-get update sudo apt-get install gambas3 -y Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016) Pour la Doc, c'est vers là: Documentation Gambas3 FR | ||||
Fly06 | #9 Posté le 10/6/2012 à 12:13:46 | ||||
@siscard06:Piste intéressante à étudier, mais je connais pas encore "Regex", et je ne comprends pas très bien la notion de "classes", ça viendra sans doute à l'usage (objets et fonctions, c'est à peu près clair). Je la mets de côté pour le moment; mais si tu peux me donner quelques indications de plus sur ton idée... Les regex sont un outil très puissant et très utile implémentés dans beaucoup de langages de programmation mais il faut un petit effort d'apprentissage pour en comprendre le principe et la syntaxe ;-) Le problème qui consiste à supprimer les caractères de contrôle d'une chaîne est un problème classique abondamment discuté sur le web. Concernant l'utilisation du composant Regexp de Gambas, je ne pourrais pas t'aider ne l'ayant pas encore utilisé... mais il me semble qu'il y a deux ou trois files sur ce forum qui en parlent... (PS t'es dans quel coin du 06, moi c'est Levens, dans les collines au dessus de Nice) Je suis sur Cannes. | |||||
siscard06 | #10 Posté le 10/6/2012 à 16:00:10 | ||||
Essais String Rebelle 1- Exec ["strings", Poids] To Pds : n'affiche rien 2- Dim Poids, Pds As String Dim I As Integer FOR I = 1 To 13 Pds = Pds & " " & Asc(Mid(Poids, I, 1)) TextBox1.Text = Pds WAIT 1 NEXT : Affiche 2 1/2 de chaines successives en 2 temps pour 0.376 kg sur la balance: 32 32 32 32 48 46 51 55 0 0 0 0 puis 56 32 107 103 32 32 32 32 32 78 13 10 0 SP SP SP SP 0 . 3 7 6 SP k g SP SP SP SP SP N CR LF |C'est ici que le 1° affichage s'interrompt pour laisser place à la 2° partie 3- Dim Poids, Pds As String Dim I As Integer Poids = Read #SPort, Lof(Sport) I = InStr(Poids, Chr$(0)) Pds = Mid$(Poids, 1, I - 1) & Mid$(Poids, I + 1, Len(Poids)) TextBox1.Text = Pds Wait 1 : affiche toujours en 2 temps 4- Pds = Replace(Poids, Chr$(0), " ") aucun effet (j'ai essayé avec tous les codes de 0 à 31 + 127) 5- Dim Poids, Pds As String Dim I As Integer Poids = Read #SPort, Lof(Sport) I = InStr(Poids, Chr$(0)) TextBox1.Text = I Wait 1 : Affiche I=0 NE TROUVE PAS le caractère NUL (J'ai essayé aussi avec tous les codes de 0 à 31 + 127) Conclusion : La chaine reçue est coupée par un caractère non ASCII, qui est interprété comme une fin de chaine ou un saut de ligne, bref qui fractionne l'affichage. Merci de vos contributions à tous, j'ai appris plein de choses. Si d'autres idées, on peut tout de même essayer pendant que j'ai un peu de temps. Pour le moment, j'essaye d'assembler les 2 morceaux de string avec un temporisateur entre les 2 lectures de chaque morceau. Faut aussi que j'essaye en modifiant les paramètres de connexions (+ ou - vite ?) Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||
siscard06 | #11 Posté le 10/6/2012 à 17:53:21 | ||||
AYE j'ai trouvé
C'est pas très joli, mais ça marche. Merci à tous Si tu veux rendre un homme heureux un jour, donnes lui à manger Si tu veux le rendre heureux toute sa vie, apprends lui à pêcher | |||||
Reivillo | #12 Posté le 10/6/2012 à 23:10:54 | ||||
C' est ici, et nul part ailleurs. « Et pis c'est tout ! » | Re. Peux-tu me Faire un Copier/Coller de la Console Gambas, du résultat de cette procédure.
Je pourrai mieux appréhender ton problème, en essayant une simulation avec tes retours de Console. Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015) LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr LÀ. Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous... sudo add-apt-repository ppa:gambas-team/gambas3 sudo apt-get update sudo apt-get install gambas3 -y Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016) Pour la Doc, c'est vers là: Documentation Gambas3 FR | ||||
1 |