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
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
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
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
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
----- 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
----- Original Message -----
From: "TP" <TP@discussions.microsoft.com>
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
----- 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
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
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
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
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
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
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
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
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.
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
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 ??
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
Salut TP
"TP" <TP@discussions.microsoft.com> a écrit dans le message de news:
42A114EB-5100-47A6-BC6C-59BDB70EDC03@microsoft.com...
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 ??
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)
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 ??
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
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
Merci Thierry
Je viens exactement de me rendre compte que je n'avais pas mis de point
virgule...