Ecrire dans fichier texte avec champs de longueur déterminé

Le
RENAUD Eric
Bonjour,
Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
texte.
Ca je fais le faire mais je dois écrire chaque valeur située entre les
points-virugules avec une longueur déterminée et ça je ne sais pas.
Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As Nom,
10 As Prénom, 20 As Ville
Les données :
Renaud;Eric;Evreux
De Frutos; Germain;Arnières sur Iton

Exemple
Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le champ
Ville toujours 20

etc..
Lorsque j'écris dans mon fichier texte,
Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant de
la gauche
Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant de
la gauche
Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant de
la gauche
(Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)

J'espère que l'exemple ci-dessous sera explicite
15 25 45
Renaud Eric Evreux
De Frutos Germain Arnières sur Iton
J'espère avoir été clair.
Un petit exemple devrait me suffir pour me mettre sur la piste.
D'avance merci
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
X
Le #15506941
Bonsoir,

Alors, pour que ce soit calé à la lecture (écran, papier), déjà c'est
plus simple avec une police fixe, moi je prend toujours "couRier new"...
Sinon, le valeurs numériques, il faut les formater:
objet_qui_affiche = Format(valeur, "# ##0.00") ' par exemple...

Il y a au moins 2 possibilités, soit tu gère ton fichier sans tenir
compte des longueurs, et c'est à la sortie que tu formate, soit tu formate
les datas dans ton fichier, ce qui fait qu'en sortant elles sont en forme
(entrées ou sortie)...

Concernant le fichier, il faut faire ça dans un fichier texte normal à
mon sens, la cadrage va s'effectuer à l'aide des variables fixes, soit:
Dim chaine1 as string * 10
Dim chaine2 as string * 15
Mais ne pas abuser du * 15

Si possible les mettre en local, car s'il y en a de trop, il me semble que
ce type de variable étant empilé, ça peut faire des débordements de piles...
Second problème, ce type de variable es toujours plein (même vide, lol), si
tu déclares:
dim x as string * 3
et que tu fais

x=""
i = len(x)
i=3
Donc pour tester, il faut repasser dans une variable de longueur
indéterminée de typer string normale, en ce qui te concerne, soit:
dim teste as string
dim x as string * 3
'
x = "12"
i = len(x)
i = 3
teste = x
teste = trim(teste) ' on retasse
i = len(teste) ' et là on aura la vrai longueur
i = 2

Donc le fichier peut être le suivant (exemple):
Dim nom as string *15
Dim prenom as string * 10
Dim prenom as string * 20
Dim p As long
'
ChDrive App.Path
ChDir App.Path
p = FreeFile
Open "fichier.txt" For Append As p ' si inexistant = créé
Print #p, nom ' écriture
Print #p, prenom
Print #p, ville
close p
'
list1.clear ' écriture du fichier dans une liste
p = FreeFile
Open "fichier.txt" For input As p ' lecture dans une liste
do while eof(p) <> true
if eof(p) = true then exit do
Line Input #p, nom
list1.additem nom
Line Input #p, prenom
list1.additem prenom
Line Input #p, ville
list1.additem ville
loop
close p
------------------------------------
Non testé, j'ai fait à main levée et de tête...
Si ça coince, dis :o)
------------------------------------



"RENAUD Eric"
| Bonjour,
| Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
| texte.
| Ca je fais le faire mais je dois écrire chaque valeur située entre les
| points-virugules avec une longueur déterminée et ça je ne sais pas.
| Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As
Nom,
| 10 As Prénom, 20 As Ville
| Les données :
| Renaud;Eric;Evreux
| De Frutos; Germain;Arnières sur Iton
|
| Exemple
| Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le
champ
| Ville toujours 20
|
| etc..
| Lorsque j'écris dans mon fichier texte,
| Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant
de
| la gauche
| Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant
de
| la gauche
| Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant
de
| la gauche
| (Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)
|
| J'espère que l'exemple ci-dessous sera explicite
| 15 25 45
| Renaud Eric Evreux
| De Frutos Germain Arnières sur Iton
| J'espère avoir été clair.
| Un petit exemple devrait me suffir pour me mettre sur la piste.
| D'avance merci
|
|
Jacques93
Le #15506931
Bonsoir RENAUD Eric,
RENAUD Eric a écrit :
Bonjour,
Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
texte.
Ca je fais le faire mais je dois écrire chaque valeur située entre les
points-virugules avec une longueur déterminée et ça je ne sais pas.
Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As Nom,
10 As Prénom, 20 As Ville
Les données :
Renaud;Eric;Evreux
De Frutos; Germain;Arnières sur Iton

Exemple
Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le champ
Ville toujours 20

etc..
Lorsque j'écris dans mon fichier texte,
Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant de
la gauche
Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant de
la gauche
Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant de
la gauche
(Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)

J'espère que l'exemple ci-dessous sera explicite
15 25 45
Renaud Eric Evreux
De Frutos Germain Arnières sur Iton
J'espère avoir été clair.
Un petit exemple devrait me suffir pour me mettre sur la piste.
D'avance merci



Peut être un truc du genre :

Private Sub Toto()
Dim Rec As String
Dim Champ1 As String, Champ2 As String, Champ3 As String

Champ1 = "Renaud"
Champ2 = "Eric"
Champ3 = "Evreux"
Rec = Pad(Champ1, 15) & Pad(Champ2, 10) & Pad(Champ3, 20)
End Sub

Private Function Pad(Str As String, Length As Integer) As String
Pad = Str & Space(Length - Len(Str))
End Function



--
Cordialement,

Jacques.
Clive Lumb
Le #15506921
"RENAUD Eric" news:
Bonjour,
Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
texte.
Ca je fais le faire mais je dois écrire chaque valeur située entre les
points-virugules avec une longueur déterminée et ça je ne sais pas.
Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As


Nom,
10 As Prénom, 20 As Ville
Les données :
Renaud;Eric;Evreux
De Frutos; Germain;Arnières sur Iton

Exemple
Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le


champ
Ville toujours 20

etc..
Lorsque j'écris dans mon fichier texte,
Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant


de
la gauche
Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant


de
la gauche
Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant


de
la gauche
(Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)

J'espère que l'exemple ci-dessous sera explicite
15 25 45
Renaud Eric Evreux
De Frutos Germain Arnières sur Iton
J'espère avoir été clair.
Un petit exemple devrait me suffir pour me mettre sur la piste.
D'avance merci



C'est vrai qu'on oublie les anciennes commandes de formattage.
Celui que tu cherches est Tab(n) qui commence l'écriture suivante à la
colonne "n".
Mais dans ton cas je vois que tu voudrais avoir les champs "justifiés" à
droite.
Pour cela il suffit d'écrire une petite fonction comme ceci:

Public Function MyFormat(Chaine As String, LChaine As Integer, ADroite As
Boolean)
If Len(Chaine) >= LChaine Then
' La chaine est plus long que le champ, on tronçonne
MyFormat = Left$(Chaine, LChaine)
Exit Function
Else
If ADroite Then
' on aligne à droite
MyFormat = String$(LChaine - Len(Chaine), " ") & Chaine
Else
' On aligne à gauche
MyFormat = Chaine & String$(LChaine - Len(Chaine), " ")
End If
End If
End Function

On assemble les champs avec "&" comme ceci
Debug.Print MyFormat("Hello", 15, True) & MyFormat("world", 10, True)
X
Le #15506901
Précision,

Pour caller à droite avat enregistrement dans ta variable, c'est:

x = Rtrim(x) ' Rtrim recale à droite...
--------------------

"X"
| Bonsoir,
|
| Alors, pour que ce soit calé à la lecture (écran, papier), déjà c'est
| plus simple avec une police fixe, moi je prend toujours "couRier new"...
| Sinon, le valeurs numériques, il faut les formater:
| objet_qui_affiche = Format(valeur, "# ##0.00") ' par exemple...
|
| Il y a au moins 2 possibilités, soit tu gère ton fichier sans tenir
| compte des longueurs, et c'est à la sortie que tu formate, soit tu formate
| les datas dans ton fichier, ce qui fait qu'en sortant elles sont en forme
| (entrées ou sortie)...
|
| Concernant le fichier, il faut faire ça dans un fichier texte normal à
| mon sens, la cadrage va s'effectuer à l'aide des variables fixes, soit:
| Dim chaine1 as string * 10
| Dim chaine2 as string * 15
| Mais ne pas abuser du * 15
|
| Si possible les mettre en local, car s'il y en a de trop, il me semble que
| ce type de variable étant empilé, ça peut faire des débordements de
piles...
| Second problème, ce type de variable es toujours plein (même vide, lol),
si
| tu déclares:
| dim x as string * 3
| et que tu fais
|
| x=""
| i = len(x)
| i=3
| Donc pour tester, il faut repasser dans une variable de longueur
| indéterminée de typer string normale, en ce qui te concerne, soit:
| dim teste as string
| dim x as string * 3
| '
| x = "12"
| i = len(x)
| i = 3
| teste = x
| teste = trim(teste) ' on retasse
| i = len(teste) ' et là on aura la vrai longueur
| i = 2
|
| Donc le fichier peut être le suivant (exemple):
| Dim nom as string *15
| Dim prenom as string * 10
| Dim prenom as string * 20
| Dim p As long
| '
| ChDrive App.Path
| ChDir App.Path
| p = FreeFile
| Open "fichier.txt" For Append As p ' si inexistant = créé
| Print #p, nom ' écriture
| Print #p, prenom
| Print #p, ville
| close p
| '
| list1.clear ' écriture du fichier dans une liste
| p = FreeFile
| Open "fichier.txt" For input As p ' lecture dans une liste
| do while eof(p) <> true
| if eof(p) = true then exit do
| Line Input #p, nom
| list1.additem nom
| Line Input #p, prenom
| list1.additem prenom
| Line Input #p, ville
| list1.additem ville
| loop
| close p
| ------------------------------------
| Non testé, j'ai fait à main levée et de tête...
| Si ça coince, dis :o)
| ------------------------------------
|
|
|
| "RENAUD Eric" |
|| Bonjour,
|| Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
|| texte.
|| Ca je fais le faire mais je dois écrire chaque valeur située entre les
|| points-virugules avec une longueur déterminée et ça je ne sais pas.
|| Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As
| Nom,
|| 10 As Prénom, 20 As Ville
|| Les données :
|| Renaud;Eric;Evreux
|| De Frutos; Germain;Arnières sur Iton
||
|| Exemple
|| Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le
| champ
|| Ville toujours 20
||
|| etc..
|| Lorsque j'écris dans mon fichier texte,
|| Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant
| de
|| la gauche
|| Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant
| de
|| la gauche
|| Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant
| de
|| la gauche
|| (Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)
||
|| J'espère que l'exemple ci-dessous sera explicite
|| 15 25 45
|| Renaud Eric Evreux
|| De Frutos Germain Arnières sur Iton
|| J'espère avoir été clair.
|| Un petit exemple devrait me suffir pour me mettre sur la piste.
|| D'avance merci
||
||
|
|
RENAUD Eric
Le #15506841
Bonsoir,
Merci à tous j'ai réussi à réaliser mon programme

"RENAUD Eric" news:
Bonjour,
Je souhaite à partie d'un fichier CSV, écrire les infos dans un fichier
texte.
Ca je fais le faire mais je dois écrire chaque valeur située entre les
points-virugules avec une longueur déterminée et ça je ne sais pas.
Je me souviens vaguement en GWBasic quelque chose comme Field #1,15 As


Nom,
10 As Prénom, 20 As Ville
Les données :
Renaud;Eric;Evreux
De Frutos; Germain;Arnières sur Iton

Exemple
Le champ Nom doit toujours faire 15, le champ Prénom toujours 10 et le


champ
Ville toujours 20

etc..
Lorsque j'écris dans mon fichier texte,
Le champ 1 doit faire une longueur de 15 calé à la position 15 en partant


de
la gauche
Le champ 2 doit faire une longueur 10 calé à à la position 25 en partant


de
la gauche
Le champ 3 doit faire un longueur de 20 calé à la position 45 en partant


de
la gauche
(Lorsque je l'ouvre dans un éditeur comme Ultra-Edit)

J'espère que l'exemple ci-dessous sera explicite
15 25 45
Renaud Eric Evreux
De Frutos Germain Arnières sur Iton
J'espère avoir été clair.
Un petit exemple devrait me suffir pour me mettre sur la piste.
D'avance merci




Poster une réponse
Anonyme