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

Boucle pour remplir un fichier txt

10 réponses
Avatar
---DGI972---
Bonjour,
Je bute toujours sur des boucles et j'aurais souhaité un petit coup de
pouce:
Je dois fabriquer un fichier avec des fichiers existants:
Il y a une liste de référence:L_REFEICXXX.txt
Il y a une liste d'adresse Email:L_EMAIL.txt
Avec les 2 listes de fichier je dois créer le fichier de sortie:
MAIL:999_XXX.txt qui contient pour chaque référence L_REFEICXXX.txt
autand de ligne que d'adresse EMAIL contenu dans le fichier L_EMAIL.

Cela fonctionne a moitié c'est à dire le fichier est créé avec la liste
des Emails mais avec une seule réérence dans le fichier L_REFEICXXX.txt
Le LREF=L_REFEIC.Readline ne s'incrémente pas.
Merci d'avance

voici le code:

QUANT=Date()-DateSerial(Year(Date()),1,1)+1
if QUANT<100 then QUANT="0"&QUANT
DEBUT_166="<>0999999 99999999999"


L1_166="<>064002166999999
999999 9999"
L2_166=" 99999999999999999 999999 9999"


L3_166="9999999999999999999999999999
"
FIN_166="<>09999999999999999999999999999999"
Set MAIL = fso.CreateTextFile("D:\999\999_"&QUANT&".txt", True, False)
Set L_REFEIC = fso.OpenTextFile ("D:\999\L_REFEIC"&QUANT&".txt", 1)
Set L_EMAIL = fso.OpenTextFile ("D:\999\L_EMAIL.txt", 1)
BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166 'fabrication de
la ligne L1_166+LE+L2_166+Lref+L3_166
loop
loop
MAIL.Writeline FIN_166
Set MAIL = Nothing
Set L_REFEIC = Nothing
Set L_EMAIL = Nothing
WScript.Echo "Fin du traitement MAIL999 du quantième : "&QUANT
WScript.Quit(0)

10 réponses

Avatar
Michel Claveau
Bonjour !

En lisant uniquement, mais strictement, ton descriptif, on peut
utiliser le batch suivant :

@echo off
echo >999_XXX.txt
for /F %%i in (L_REFEICXXX.txt) do (for /F %%j in (L_EMAIL.txt) do
echo %%i %%j>>999_XXX.txt)


Mais, si ça répond au descriptif que tu as écris, cela m'étonnerais
beaucoup que cela corresponde à ton besoin réel.


Je dois fabriquer un fichier avec des fichiers existants:
Il y a une liste de référence:L_REFEICXXX.txt
Il y a une liste d'adresse Email:L_EMAIL.txt
Avec les 2 listes de fichier je dois créer le fichier de sortie:
MAIL:999_XXX.txt qui contient pour chaque référence L_REFEICXXX.txt
autand de ligne que d'adresse EMAIL contenu dans le fichier L_EMAIL.



--
@-salutations

Michel Claveau


Avatar
Michel Claveau
Re

Je m'excuse, il manquait un point :

@echo off
echo.>999_XXX.txt
for /F %%i in (L_REFEICXXX.txt) do (for /F %%j in (L_EMAIL.txt) do
echo %%i %%j>>999_XXX.txt)

Mais, encore mieux, on pourrait mettre, en seconde ligne :
del 999_XXX.txt

--
@-salutations

Michel Claveau
Avatar
---DGI972---
Re

Je m'excuse, il manquait un point :

@echo off
echo.>999_XXX.txt
for /F %%i in (L_REFEICXXX.txt) do (for /F %%j in (L_EMAIL.txt) do echo
%%i %%j>>999_XXX.txt)

Mais, encore mieux, on pourrait mettre, en seconde ligne :
del 999_XXX.txt


Les XXX représente le Quantième du Jour par ex: 230.
Je vais expliquer un peu plus.

J'un fichier avec des adresses MAIL:




j'ai un fichier de références
111111
222222

j'essaye de fabriquer un fichier de sortie
A chaque référence il faut fabriquer une ligne avec toutes les adresses
Emails.Ma boucle fonctionne qu'une seule fois pour la première
référence seulement.Je n'ai pas la ligne avec les 222222.

BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166 'fabrication de
la ligne L1_166+LE+L2_166+Lref+L3_166
loop
loop
MAIL.Writeline FIN_166

Aidez moi SVP j'y vois plus rien

ex de fichier de sortie

<>0999999 99999999999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>09999999999999999999999999999999

Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:

Bonjour,

Je me permet de m'immiscer dans cette conversation.

| Les XXX représente le Quantième du Jour par ex: 230.
| Je vais expliquer un peu plus.
|
| J'un fichier avec des adresses MAIL:
|
|
|
|
| j'ai un fichier de références
| 111111
| 222222
|
| j'essaye de fabriquer un fichier de sortie
| A chaque référence il faut fabriquer une ligne avec toutes les
| adresses Emails.Ma boucle fonctionne qu'une seule fois pour la
| première référence seulement.Je n'ai pas la ligne avec les 222222.
|
| BREDMAIL.Writeline DEBUT_166
| Do while Not L_REFEIC.AtEndOfStream
| LREF=L_REFEIC.Readline
| Do until L_EMAIL.AtEndOfStream
| LE = L_EMAIL.Readline
| BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166 'fabrication
| de la ligne L1_166+LE+L2_166+Lref+L3_166
| loop
| loop
| MAIL.Writeline FIN_166
|
| Aidez moi SVP j'y vois plus rien
|
| ex de fichier de sortie
|
| <>0999999 99999999999
| <>0999 111111 09999 0999 999
| <>0999 111111 09999 0999 999
| <>0999 111111 09999 0999 999
| <>0999 222222 09999 0999 999
| <>0999 222222 09999 0999 999
| <>0999 222222 09999 0999 999
| <>09999999999999999999999999999999

Le fichier L_EMAIL.txt doit obligatoirement être réouvert à chaque
itération afin de permettre la relecture de tous les enregistrements
qu'il contient. Ceci permet de positionner le pointeur de fichier sur le
premier enregistrement (rewind).

Set fso = CreateObject("Scripting.FileSystemObject")
Set BREDMAIL = fso.CreateTextFile("D:999999_"&QUANT&".txt", True,
False)
Set L_REFEIC = fso.OpenTextFile ("D:999L_REFEIC"&QUANT&".txt", 1)
BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Set L_EMAIL = fso.OpenTextFile ("D:999L_EMAIL.txt", 1)
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166
Loop
L_EMAIL.Close
Loop
BREDMAIL.Writeline FIN_166

Je m'éclipse en silence monastique ;-)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
---DGI972---
Gilles LAURENT a utilisé son clavier pour écrire :
"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:

Bonjour,

Je me permet de m'immiscer dans cette conversation.

Les XXX représente le Quantième du Jour par ex: 230.
Je vais expliquer un peu plus.

J'un fichier avec des adresses MAIL:




j'ai un fichier de références
111111
222222

j'essaye de fabriquer un fichier de sortie
A chaque référence il faut fabriquer une ligne avec toutes les
adresses Emails.Ma boucle fonctionne qu'une seule fois pour la
première référence seulement.Je n'ai pas la ligne avec les 222222.

BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166 'fabrication
de la ligne L1_166+LE+L2_166+Lref+L3_166
loop
loop
MAIL.Writeline FIN_166

Aidez moi SVP j'y vois plus rien

ex de fichier de sortie

<>0999999 99999999999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>09999999999999999999999999999999


Le fichier L_EMAIL.txt doit obligatoirement être réouvert à chaque
itération afin de permettre la relecture de tous les enregistrements
qu'il contient. Ceci permet de positionner le pointeur de fichier sur le
premier enregistrement (rewind).

Set fso = CreateObject("Scripting.FileSystemObject")
Set BREDMAIL = fso.CreateTextFile("D:999999_"&QUANT&".txt", True,
False)
Set L_REFEIC = fso.OpenTextFile ("D:999L_REFEIC"&QUANT&".txt", 1)
BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Set L_EMAIL = fso.OpenTextFile ("D:999L_EMAIL.txt", 1)
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166
Loop
L_EMAIL.Close
Loop
BREDMAIL.Writeline FIN_166

Je m'éclipse en silence monastique ;-)


Des silences comme cela j'en redemande.
Testé cela fonctionne et en plus j'ai compris.

Merci merci merci


Avatar
---DGI972---
Il se trouve que ---DGI972--- a formulé :
Gilles LAURENT a utilisé son clavier pour écrire :
"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:

Bonjour,

Je me permet de m'immiscer dans cette conversation.

Les XXX représente le Quantième du Jour par ex: 230.
Je vais expliquer un peu plus.

J'un fichier avec des adresses MAIL:




j'ai un fichier de références
111111
222222

j'essaye de fabriquer un fichier de sortie
A chaque référence il faut fabriquer une ligne avec toutes les
adresses Emails.Ma boucle fonctionne qu'une seule fois pour la
première référence seulement.Je n'ai pas la ligne avec les 222222.

BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166 'fabrication
de la ligne L1_166+LE+L2_166+Lref+L3_166
loop
loop
MAIL.Writeline FIN_166

Aidez moi SVP j'y vois plus rien

ex de fichier de sortie

<>0999999 99999999999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 111111 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>0999 222222 09999 0999 999
<>09999999999999999999999999999999


Le fichier L_EMAIL.txt doit obligatoirement être réouvert à chaque
itération afin de permettre la relecture de tous les enregistrements
qu'il contient. Ceci permet de positionner le pointeur de fichier sur le
premier enregistrement (rewind).

Set fso = CreateObject("Scripting.FileSystemObject")
Set BREDMAIL = fso.CreateTextFile("D:999999_"&QUANT&".txt", True,
False)
Set L_REFEIC = fso.OpenTextFile ("D:999L_REFEIC"&QUANT&".txt", 1)
BREDMAIL.Writeline DEBUT_166
Do while Not L_REFEIC.AtEndOfStream
LREF=L_REFEIC.Readline
Set L_EMAIL = fso.OpenTextFile ("D:999L_EMAIL.txt", 1)
Do until L_EMAIL.AtEndOfStream
LE = L_EMAIL.Readline
BREDMAIL.WriteLine L1_166&LE&L2_166&LREF&L3_166
Loop
L_EMAIL.Close
Loop
BREDMAIL.Writeline FIN_166

Je m'éclipse en silence monastique ;-)


Des silences comme cela j'en redemande.
Testé cela fonctionne et en plus j'ai compris.

Merci merci merci


Je remets cela,
J'ai uune boucle du même style mais avec une connection ODBC et je suis
de nouveau perdu.

OdbcDSN = "DSN=DNC;UID=sa;PWD="
Set connect = CreateObject("ADODB.Connection")
Set fso = CreateObject("Scripting.FileSystemObject")

connect.Open OdbcDSN
Set L_OPEEIC =
fso.CreateTextFile("D:BREMAIL999L_OPEEIC"&QUANT&".txt", True, False)
Set L_COMPTE = fso.OpenTextFile ("D:BREMAIL999L_COMPTE.txt", 1)

Do until L_COMPTE.AtEndOfStream
LCOMPTE = L_COMPTE.Readline
If LCOMPTE <>"" then sql="select* from chq where val4
='"&LCOMPTE&"' and val5 >='000000500000' and val8 ='"&Date_T&"' and
(val7 like 'BRED %') and val1 ='C' and val11 ='R'"

Set resultSet = connect.Execute(sql)
Do until resultSet.eof
LOPEEIC=resultSet.fields("val6").Value
If LOPEEIC<>" " then
L_OPEEIC.WriteLine LOPEEIC 'si EIC vide ne pas recopier la ligne
resultSet.MoveNext
Loop
L_COMPTE.Close
Loop

Set L_COMPTE = Nothing
Set L_OPEEIC = Nothing


Variable objet non défini dans la ligne au début (Do):
Do until L_COMPTE.AtEndOfStream

puis Variable objet non défini dans la ligne
If LOPEEIC<>" " then L_OPEEIC.WriteLine LOPEEIC
avec la variable L_OPEEIC.
??
DGI972



Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de news:

Bonjour,

| Je remets cela,
| J'ai uune boucle du même style mais avec une connection ODBC et je
| suis de nouveau perdu.

[...]

| Set L_COMPTE = fso.OpenTextFile ("D:BREMAIL999L_COMPTE.txt", 1)
|
| Do until L_COMPTE.AtEndOfStream
| Do until resultSet.eof
| Loop
| L_COMPTE.Close
| Loop
|
| Set L_COMPTE = Nothing
| Set L_OPEEIC = Nothing
|

La commande de fermeture du fichier L_COMPTE.Close doit se situer à
l'extérieur de la première boucle do .. loop sinon vous fermez le
fichier à la fin de la première itération. Donc :
do until L_COMPTE
do until resultSet
loop
loop
L_COMPTE.Close

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
---DGI972---
Gilles LAURENT a formulé ce mardi :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de news:

Bonjour,

Je remets cela,
J'ai uune boucle du même style mais avec une connection ODBC et je
suis de nouveau perdu.


[...]

Set L_COMPTE = fso.OpenTextFile ("D:BREMAIL999L_COMPTE.txt", 1)

Do until L_COMPTE.AtEndOfStream
Do until resultSet.eof
Loop
L_COMPTE.Close
Loop

Set L_COMPTE = Nothing
Set L_OPEEIC = Nothing



La commande de fermeture du fichier L_COMPTE.Close doit se situer à
l'extérieur de la première boucle do .. loop sinon vous fermez le
fichier à la fin de la première itération. Donc :
do until L_COMPTE
do until resultSet
loop
loop
L_COMPTE.Close


Un grand Merci,

C'était bien la le Pb, j'était sur plusieur Pb à la fois et je ne
voyais pas l'erreur (et j'ai personne avec moi pour débugger).

J'ai fini mon petit projet grace à vous.

Merci encore
DGI972


Avatar
---DGI972---
Gilles LAURENT a formulé ce mardi :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de news:

Bonjour,

Je remets cela,
J'ai uune boucle du même style mais avec une connection ODBC et je
suis de nouveau perdu.


[...]

Set L_COMPTE = fso.OpenTextFile ("D:BREMAIL999L_COMPTE.txt", 1)

Do until L_COMPTE.AtEndOfStream
Do until resultSet.eof
Loop
L_COMPTE.Close
Loop

Set L_COMPTE = Nothing
Set L_OPEEIC = Nothing



La commande de fermeture du fichier L_COMPTE.Close doit se situer à
l'extérieur de la première boucle do .. loop sinon vous fermez le
fichier à la fin de la première itération. Donc :
do until L_COMPTE
do until resultSet
loop
loop
L_COMPTE.Close


Un grand Merci,

C'était bien la le Pb, j'était sur plusieur Pb à la fois et je ne voyais pas
l'erreur (et j'ai personne avec moi pour débugger).

J'ai fini mon petit projet grace à vous.

Merci encore
DGI972


Tout fonctionne comme je veux.
Merci,
je ne pensais pas vous trouver sur le fil aprés plus de 10 jours.



Avatar
Gilles LAURENT
"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:

Bonjour,

| Tout fonctionne comme je veux.

C'est super ;-)

| Je ne pensais pas vous trouver sur le fil aprés plus de 10 jours.

Hé hé :-) Je garde toujours un oeil sur les fils auxquels j'ai participé

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD