OVH Cloud OVH Cloud

Lecture du port Serie et Ecriture dans un fichier

6 réponses
Avatar
pierremag
Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans problemes
(Text1.SelText = Tampon) et tous les tickets s'affichent correctement.
Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.

J'ai essayé plein de variantes, en écriture direct sans fonction, en
ouvrant le fichier une fois pour toute et en le fermant uniquement à
l'arret de l'application, ou meme en ecrivant le contenu de
Text1.SelText dans mon fichier, mais sans succés.

Le probleme n'est pas dans le lecture du port COM, puisque mes données
s'affichent correctement dans mon champ texte, mais bien dans
l'ecriture à la volée dans ce fichier...

Si vous avez des idées, je suis preneur !

Merci d'avance.

Pierre

=============================================
Ca vient de la ...
http://grafikm.developpez.com/portcomm/
=============================================

Private Sub MSComm1_OnComm()

'Detection d'element sur le port com
Dim InBuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
Tampon = MSComm1.Input
Call Traitement(Tampon) 'traitement données
Case comEvSend ' il y a des caractères à ENVOYER
Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(Tampon As String)
Numfich = FreeFile
'cette procédure sert à traiter l'information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Tampon 'ici, on affiche le résultat dans un champ
de texte
Open NomFichierJour$ For Append As #Numfich 'Ecriture des valeurs
dans le fichier
Print #Numfich, Tampon$
Close #1 'Ferme le fichier
End Sub

6 réponses

Avatar
Patrice Henrio
Pour être sûr de ce que l'on reçoit par un port, il peut être utile de lire
les données octet par octet, cela permet de bien savoir ce qui arrive et de
construire une fonction d'écriture des données dans un fichier texte en
éliminant les "parasites".


"Pierre" a écrit dans le message de
news:
Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans problemes
(Text1.SelText = Tampon) et tous les tickets s'affichent correctement.
Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.

J'ai essayé plein de variantes, en écriture direct sans fonction, en
ouvrant le fichier une fois pour toute et en le fermant uniquement à
l'arret de l'application, ou meme en ecrivant le contenu de
Text1.SelText dans mon fichier, mais sans succés.

Le probleme n'est pas dans le lecture du port COM, puisque mes données
s'affichent correctement dans mon champ texte, mais bien dans
l'ecriture à la volée dans ce fichier...

Si vous avez des idées, je suis preneur !

Merci d'avance.

Pierre

============================================ > Ca vient de la ...
http://grafikm.developpez.com/portcomm/
============================================ >
Private Sub MSComm1_OnComm()

'Detection d'element sur le port com
Dim InBuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
Tampon = MSComm1.Input
Call Traitement(Tampon) 'traitement données
Case comEvSend ' il y a des caractères à ENVOYER
Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(Tampon As String)
Numfich = FreeFile
'cette procédure sert à traiter l'information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Tampon 'ici, on affiche le résultat dans un champ
de texte
Open NomFichierJour$ For Append As #Numfich 'Ecriture des valeurs
dans le fichier
Print #Numfich, Tampon$
Close #1 'Ferme le fichier
End Sub


Avatar
ng
Salut,

Essaye d'utiliser Print; et non Print :

Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$;
Close #Numfich

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Pierre a écrit :

Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans problemes
(Text1.SelText = Tampon) et tous les tickets s'affichent correctement.
Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.

J'ai essayé plein de variantes, en écriture direct sans fonction, en
ouvrant le fichier une fois pour toute et en le fermant uniquement à
l'arret de l'application, ou meme en ecrivant le contenu de
Text1.SelText dans mon fichier, mais sans succés.

Le probleme n'est pas dans le lecture du port COM, puisque mes données
s'affichent correctement dans mon champ texte, mais bien dans
l'ecriture à la volée dans ce fichier...

Si vous avez des idées, je suis preneur !

Merci d'avance.

Pierre

============================================ > Ca vient de la ...
http://grafikm.developpez.com/portcomm/
============================================ >
Private Sub MSComm1_OnComm()

'Detection d'element sur le port com
Dim InBuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
Tampon = MSComm1.Input
Call Traitement(Tampon) 'traitement données
Case comEvSend ' il y a des caractères à ENVOYER
Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(Tampon As String)
Numfich = FreeFile
'cette procédure sert à traiter l'information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Tampon 'ici, on affiche le résultat dans un champ
de texte
Open NomFichierJour$ For Append As #Numfich 'Ecriture des valeurs
dans le fichier
Print #Numfich, Tampon$
Close #1 'Ferme le fichier
End Sub


Avatar
Jean-Marc
"Pierre" a écrit dans le message de
news:
Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans problemes
(Text1.SelText = Tampon) et tous les tickets s'affichent correctement.
Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.



Hello,
tu peux aussi virer les CRLF sans autre forme de procès:
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Replace(Tampon$, vbCrLF, "")
Close #1 'Ferme le fichier

Jean-Marc
Avatar
ng
Salut,

Je pense que le problème vien tplutot des CRLF ajoutés par Print.
L'utilsation de Print; (avec un ; à la fin donc) permet d'éviter cela.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Jean-Marc a écrit :

"Pierre" a écrit dans le message de
news:
Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans
problemes (Text1.SelText = Tampon) et tous les tickets s'affichent
correctement. Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.



Hello,
tu peux aussi virer les CRLF sans autre forme de procès:
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Replace(Tampon$, vbCrLF, "")
Close #1 'Ferme le fichier

Jean-Marc


Avatar
Christophe
Salut,

Je commencerais par définir Tampon en octet comme l'a dit qqun ici puis
j'ouvrirais le fichier en AS binary de manière à:
Controler les entrées de manières univoque et fabriquer une sortie de la
même manière.
Normalement (je sais pas ce qu'est un PABX) un appareil communique une trame
ou des trames fixes par le biais d'un 232
Quelque soit le matériel qui est au bout de la 232 la manière la plus
efficace et la plus réutilisable est de gérer les octets que l'on reçoit et
de les convertir en fonctione du format attendu.

le CR/LF suivant le protocole de comm doit déjà être présent comme fin de
trame. Ta trame suivant le protocole se compose de plus de chose que les
données il y a des choses en plus comme CR/LF mais il y en a encore d'autre
qui peuvent variées selon les constructeurs.


Salutations

Ch Vergon

"Pierre" a écrit dans le message de news:

Bonjour,

Je tente de lire mon port série pour y récuperer des information en
flots (tickets de taxation d'un PABX ...)

La lecture et la visualisation des ces donnees se passe sans problemes
(Text1.SelText = Tampon) et tous les tickets s'affichent correctement.
Par contre, dés que je tente d'écrire dans un fichier
Open NomFichierJour$ For Append As #Numfich
Print #Numfich, Tampon$
Close #1 'Ferme le fichier

Ca se complique : les données se trouvent enregistrées avec des CRLF
arbitraires qui me pourissent mes données.

J'ai essayé plein de variantes, en écriture direct sans fonction, en
ouvrant le fichier une fois pour toute et en le fermant uniquement à
l'arret de l'application, ou meme en ecrivant le contenu de
Text1.SelText dans mon fichier, mais sans succés.

Le probleme n'est pas dans le lecture du port COM, puisque mes données
s'affichent correctement dans mon champ texte, mais bien dans
l'ecriture à la volée dans ce fichier...

Si vous avez des idées, je suis preneur !

Merci d'avance.

Pierre

============================================ > Ca vient de la ...
http://grafikm.developpez.com/portcomm/
============================================ >
Private Sub MSComm1_OnComm()

'Detection d'element sur le port com
Dim InBuff As String
Select Case MSComm1.CommEvent
Case comEvReceive
Tampon = MSComm1.Input
Call Traitement(Tampon) 'traitement données
Case comEvSend ' il y a des caractères à ENVOYER
Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub

Sub Traitement(Tampon As String)
Numfich = FreeFile
'cette procédure sert à traiter l'information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Tampon 'ici, on affiche le résultat dans un champ
de texte
Open NomFichierJour$ For Append As #Numfich 'Ecriture des valeurs
dans le fichier
Print #Numfich, Tampon$
Close #1 'Ferme le fichier
End Sub


Avatar
pierremag
Merci à tous de votre aide, et tout particulierement à Nicolas G. =>
un Print ; à résolu mon probleme ...

Pierre