Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec fichier à générer

8 réponses
Avatar
TP
Bonjour,

j'ai un probleme avec une macro de generation de fichier txt.
En fait je veux créer un fichier txt sur une disquette afin de l’envoyer
dans un autre logiciel.

Mon problème est que le logiciel vérifie la taille du fichier (correspondant
aux nombres de caracteres dans le fichier créé et non de taille sur le
disque) et qu’il ne supporte pas les marques de fin de fichiers ni les
marques fin de ligne.

Pour les marques de fin de ligne je n’en ai pas vu que je concatene toutes
les données à la suite.

Pour la marque de fin de fichier j’ai donc supprimer la ligne Close #Fichier .
En la supprimant j’ai bien la bonne taille correspondant aux nombres de
caracteres contenu dans mon fichier (vérifier sur un len(txtline).

Bien sur le fichier est en « lecture seule » quand j’essais de l’ouvrir
puisque pas fermé par la marque. Cette marque apparemment fait 2 octets.

Par contre pour que le fichier puisse reste ferme il faut absolument retirer
la disquette (ou cle usb) avant de fermer mon application access.

En faisant des tests j’ai constaté que si je ferme mon application avec la
disquette presente, le fichier crée prends automatiquement 2 octets (qui
doivent correspondre à la marque de fin de fichier.

Ma question (je sais c’est long mais pas évident à expliquer)…

Comment créer un fichier txt « non fermé » ?

Merci à ceux qui voudront bien m’aider…



Voici la macro que j’utilise : (je l’ai un peu amincie par rapport à celle
que j’utilise)

Sub GenerateTXT(strItem As String, _
strPath As String)

Dim strFile As String
Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Dim Fld As DAO.Field
Dim TxtLine As String
Dim Fichier As Integer

strFile = strPath & "\" & strItem & "_" & _
DCount("*", strItem) & ".txt"

Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset(strItem)
Fichier = FreeFile()

Open strFile For Output As #Fichier
NOrdre = 1
While Not rst.EOF
For Each Fld In rst.Fields
TxtLine = TxtLine & Fld.Value
Next Fld
‘Close #Fichier
Rst.Close
Dbs.Close
Set Rst = Nothing
Set Dbs = Nothing

msgbox "Fichier " & strFile & " créé.", vbOKOnly, ""

End Sub

8 réponses

Avatar
3stone
Salut,

"TP"
[...]
| Ma question (je sais c’est long mais pas évident à expliquer)…
|
| Comment créer un fichier txt « non fermé » ?

C'est un mirage que tu poursuis...




[...]
| While Not rst.EOF
| For Each Fld In rst.Fields
| TxtLine = TxtLine & Fld.Value
| Next Fld


ici, il te manque le la fin de boucle aussi...


| ‘Close #Fichier
| Rst.Close
| Dbs.Close
| Set Rst = Nothing
| Set Dbs = Nothing


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
TP
Salut 3stone

pour la boucle, comme je l'ai precise, j'ai amincie la macro pour editer un
post lisible (je sais d'ailleurs qu'il ne l'est pas :o)). Dans la macro le
"wend" y est present evidemment.

Pour le mirage je me suis mal exprime je pense...
je voulais dire creer un fichier ne possedant pas de marqueur de fin. Il est
vrai que ça peut paraitre bizarre mais le logiciel récupérant ce fichier
n'accepte qu'un fichier à "plat" sans marqueur de fin.

Si tu as des tuyaux...Il est vrai que je ne saisi pas bien la notion de
marqueur de fin de fichier.
Moi je l'ai attribue a l'instruction close car ceci me parassait logique.

Merci d'avance
TP


"3stone" wrote:

Salut,

"TP"
[...]
| Ma question (je sais c’est long mais pas évident à expliquer)…
|
| Comment créer un fichier txt « non fermé » ?

C'est un mirage que tu poursuis...




[...]
| While Not rst.EOF
| For Each Fld In rst.Fields
| TxtLine = TxtLine & Fld.Value
| Next Fld


ici, il te manque le la fin de boucle aussi...


| ‘Close #Fichier
| Rst.Close
| Dbs.Close
| Set Rst = Nothing
| Set Dbs = Nothing


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw




Avatar
Elnikoff Thierry
----- Original Message -----
From: "TP"
Newsgroups: microsoft.public.fr.access
Sent: Tuesday, March 08, 2005 6:39 PM
Subject: Probleme avec fichier à générer


Bonjour,

j'ai un probleme avec une macro de generation de fichier txt.


Procédure, pas macro. Les traitements sont différents. La façon de faire
aussi !

En fait je veux créer un fichier txt sur une disquette afin de l'envoyer
dans un autre logiciel.

Mon problème est que le logiciel vérifie la taille du fichier
(correspondant
aux nombres de caracteres dans le fichier créé et non de taille sur le
disque) et qu'il ne supporte pas les marques de fin de fichiers ni les
marques fin de ligne.


C'est quoi ce logiciel ?


Pour les marques de fin de ligne je n'en ai pas vu que je concatene toutes
les données à la suite.


OKI


Pour la marque de fin de fichier j'ai donc supprimer la ligne Close
#Fichier .
En la supprimant j'ai bien la bonne taille correspondant aux nombres de
caracteres contenu dans mon fichier (vérifier sur un len(txtline).


Oui, mais le problème, c'est que le handle du fichier est ouvert !


Bien sur le fichier est en « lecture seule » quand j'essais de l'ouvrir
puisque pas fermé par la marque. Cette marque apparemment fait 2 octets.


Ne s'agirait-il pas plutôt d'un "rn", AKA VbCrLf qui trainerait par là ?

[...]
Sub GenerateTXT(strItem As String, _
strPath As String)

Dim strFile As String
Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Dim Fld As DAO.Field
Dim TxtLine As String
Dim Fichier As Integer

strFile = strPath & "" & strItem & "_" & _
DCount("*", strItem) & ".txt"

Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset(strItem)
Fichier = FreeFile()

Open strFile For Output As #Fichier
NOrdre = 1
While Not rst.EOF
For Each Fld In rst.Fields
TxtLine = TxtLine & Fld.Value
Next Fld


Hep ! Il nous manque l'instruction de sortie vers le fichier. Pourrais-tu
nous la donner ??

'Close #Fichier
Rst.Close
Dbs.Close
Set Rst = Nothing
Set Dbs = Nothing

msgbox "Fichier " & strFile & " créé.", vbOKOnly, ""

End Sub



Amicalement,

Thierry

Avatar
TP
Merci Thierry de t’intéresser à mon problème car la je suis un peu largué…

Pour la marque de fin de fichier j'ai donc supprimer la ligne Close
#Fichier .
En la supprimant j'ai bien la bonne taille correspondant aux nombres de
caracteres contenu dans mon fichier (vérifier sur un len(txtline).


Oui, mais le problème, c'est que le handle du fichier est ouvert !



------> je sais bien mais je n’ai pas trouve d’où viennent les 2 octets
qui se rajoute

j’essais avec un objet TextStream

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:fichiertest.txt", True)
a.WriteLine (TxtLine)
a.Close

mais j’ai toujours le meme resultat 2 octets supplementaires par rapport à
mon nombre de caracteres !


Bien sur le fichier est en « lecture seule » quand j'essais de l'ouvrir
puisque pas fermé par la marque. Cette marque apparemment fait 2 octets.


Ne s'agirait-il pas plutôt d'un "rn", AKA VbCrLf qui trainerait par là ?




------> je ne vois pas ce que tu veux dire ???


[...]
Sub GenerateTXT(strItem As String, _
strPath As String)

Dim strFile As String
Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Dim Fld As DAO.Field
Dim TxtLine As String
Dim Fichier As Integer

strFile = strPath & "" & strItem & "_" & _
DCount("*", strItem) & ".txt"

Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset(strItem)
Fichier = FreeFile()

Open strFile For Output As #Fichier
NOrdre = 1
While Not rst.EOF
For Each Fld In rst.Fields
TxtLine = TxtLine & Fld.Value
Next Fld



wend

Hep ! Il nous manque l'instruction de sortie vers le fichier. Pourrais-tu
nous la donner ??


------> Print #Fichier, TxtLine & "00" & Right("000000" & N + 1, 6) &
Datecreation

A la fin de mon fichier je concatene des infos dont la date de creation
(format JJMMAA)

'Close #Fichier
Rst.Close
Dbs.Close
Set Rst = Nothing
Set Dbs = Nothing

msgbox "Fichier " & strFile & " créé.", vbOKOnly, ""

End Sub



Cordialement TP


Avatar
TP
rectification, j'ai tester avec l'objet TextStream et en l'executant en pas à
pas j'ai vu que mes 2 octets en plus etait déjà présent avant la fermeture du
fichier par

a.Close

En l'ouvrant avec excel et en vérifiant le nb de caractere j'ai bien le bon
nombre 720(en faisant len(txtline) dans vba j'ai bien 720 aussi) et par
contre la taille du fichier est de 722 octets...

Je ne vois toujours pas d'ou viennent ces 2 octets

Cordialement

TP
Avatar
TP
En fait je viens de voir qu'a la fin du fichier il y a un saut de ligne
(marqueur de fin je suppose)

Il suffirait peut-être de pouvoir aller à la fin du fichier (dernier
caractere) et faire un del de ce marqueur.
Je l'ai fait en manuel apparemment ça fonctionne reste à le faire en vba
pour que ce sont automatique.

TP
Avatar
Elnikoff Thierry
Salut TP

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

Merci Thierry de t'intéresser à mon problème car la je suis un peu largué.


Les listes sont faites pour cela !

[...]
Oui, mais le problème, c'est que le handle du fichier est ouvert !



------> je sais bien mais je n'ai pas trouve d'où viennent les 2 octets
qui se rajoute

j'essais avec un objet TextStream

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:fichiertest.txt", True)
a.WriteLine (TxtLine)


Essaie avec a.Write (TxtLine)
WriteLine est une méthode qui écrit une ligne, avec le saut de ligne final.
Write permet d'écrire les données les unes à la suite des autres (ce qui
implique entre autres que le programmeur gère lui-même les sauts de
ligne...)

a.Close

mais j'ai toujours le meme resultat 2 octets supplementaires par rapport à
mon nombre de caracteres !


Bien sur le fichier est en « lecture seule » quand j'essais de l'ouvrir
puisque pas fermé par la marque. Cette marque apparemment fait 2
octets.


Ne s'agirait-il pas plutôt d'un "rn", AKA VbCrLf qui trainerait par là
?




------> je ne vois pas ce que tu veux dire ???


VbCrfLf = Visual Basic Carriage Return Line Feed.
Historiquement, le saut de ligne était enregistré par deux codes
particuliers : CR et LF, lesquels faisaient respectivement un retour en
début de ligne et un passage à la ligne suivante.
Ainsi, pour réaliser un saut de ligne, on utilise toujours ces deux
caractères non imprimables, certes, mais prenant chacun un octet...

Hep ! Il nous manque l'instruction de sortie vers le fichier. Pourrais-tu
nous la donner ??


------> Print #Fichier, TxtLine & "00" & Right("000000" & N + 1, 6) &
Datecreation


Pour imprimer sans saut de ligne en utilisant les fonctions de bas niveau,
il faut terminer ton instruction par un ; tel que

Print #Fichier, TxtLine & "00" & Right("000000" & N + 1, 6) & Datecreation ;
Le ';' signale que tu ne souhaites pas de saut de ligne ! (en fait, que tu
n'as pas encore fini la sortie de ta ligne)

[...]

En espérant t'avoir été utile !


Thierry



Avatar
TP
Merci Thierry


Je viens exactement de me rendre compte que je n'avais pas mis de point
virgule...

Maintenant ça fonctionne nickel !

@+

Merci Encore