Probleme avec fichier à générer
Le
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
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

Poser une question


"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
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:
From: "TP" Newsgroups: microsoft.public.fr.access
Sent: Tuesday, March 08, 2005 6:39 PM
Subject: Probleme avec fichier à générer
Procédure, pas macro. Les traitements sont différents. La façon de faire
aussi !
C'est quoi ce logiciel ?
OKI
Oui, mais le problème, c'est que le handle du fichier est ouvert !
Ne s'agirait-il pas plutôt d'un "rn", AKA VbCrLf qui trainerait par là ?
[...]
Hep ! Il nous manque l'instruction de sortie vers le fichier. Pourrais-tu
nous la donner ??
Amicalement,
Thierry
------> 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 !
------> je ne vois pas ce que tu veux dire ???
wend
------> 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)
Cordialement TP
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