OVH Cloud OVH Cloud

Méthologie lecture fichier Spool d'édition

15 réponses
Avatar
---DGI972---
Bonjour,

Je doit réaliser un Script pour décortiquer un fichier Spool d'édition
et avant de me lancer dans des lignes de code j'aurais souhaité
discuter de la faisabilité et de la méthode .
Je m'explique:
J'ai un fichier Spool qui contient des pages formatées avec des Noms
Prénoms adresses etc ...
Certaines Clients possédent plusieures pages qui sont numérotées 000001
000002 dans une position fixe dans le fichier.
Le but du Script est de faire un fichier pour les clients 1 pages, 1
fichier pour les clients à 2 Pages etc ...
Je pensais lire le fichier d'entrée (ligne par ligne) jusqu'a
rencontrer le symbole de changement de page (dans mon cas 1=1=) puis
écrire cette page complète dans un fichier temporaire en mémorisant
dans une variable la valeur de la page (par ex 00001), continuer la
lecture ligne par ligne jusqu'au caractère de fin de page, écrire dans
un autre fichier temporaire en mémorisant la variable de la page (par
exemple 00001).
Si les deux variables sont identiques le premier fichier temporaire est
bien un client en 1page il faut donc le recopier dans le fichier client
1page.
Recopier le 2 iéme fichier temporaire dans le premier fichier
temporaire.
Je m'aperçois que je n'ai même pas le squelette de mon code.
Quelqu'un peut il m'aider à débroussailler ma problèmatique ???

Merci

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

5 réponses

1 2
Avatar
---DGI972---
---DGI972--- a formulé ce jeudi :
Fred vient de nous annoncer :
Dans son message
---DGI972--- nous dit :
[...]

Fred,
Un grand, trés grand merci
C'est exactement ce que je voulais.
merci


Je pousse le bouchon plus loin:

Un trie par code postal Position 75 lg 5 dans la ligne qui commence
par "00001" est ce possible même dans chaque fichier de sortie SGEDGP1
SGEDGP2 etc ???
Je sais trier d'aprés une extraction de zone mais uniquement ligne
par ligne et à condition que les lignes soient de structures
identiques ( Bref pas dans le cas présent ).
Je suis en vacances à partir de Vendredi et pas de Scripting en vue,
vue que vous m'avez déjà tout fait.
Encore bravo, je reste fasciné par la puissance du VbScript avec 20
lignes de code (et surtout le savoir faire William Saurin).

Gilles


Bonjour,
Là cela se corse un peu tout de même !
Je pense que cela est faisable complètement en vbs, mais je doute qu'on
puisse l'écrire en 20 lignes cette fois.
Je te propose une autre idée, peut-être un peu capilotractée, mais qui
devrait fonctionner.

Dans l'algorithme, à un moment donné, on ajoute le fichier temporaire à un
autre fichier en fonction du nombre de pages.
A la place, je te propose d'enregistrer ce même fichier temporaire avec un
nom bien formaté, présentant toutes tes clés de tri dans l'ordre (je me
méfie, que vas-tu demander après les codes postaux :-D ?)
En fait, et plus clairement, chaque client aura son fichier avec un nom du
style : SGEDGPn_cccccc_xxxxx etc ...
où n est le nombre de pages, cccccc le code postal et xxxxxx une autre info
rendant unique le fichier (un code client peut-être ?)
Il faut simplement dans le programme, que tu ajoutes les variables qui
récupèrent le code postal et xxxxxx

Ensuite, les commandes :
DIR SGEDGP1* /B > Fichiers1page.txt
DIR SGEDGP2* /B > Fichiers2pages.txt
...
Vont te créer des fichiers qui contiennent les noms des fichiers client par
ordre alphabétique (donc par codes postaux). A toi de les relire et de les
concaténer pour créer SGEDGP1, SGEDGP2, etc ....

Tu peux aussi utiliser la commande
DIR SGEDGP* /B > TousLesFichiers.txt

Dans la liste tu auras d'abord les clients à 1 page, puis les clients à 2
pages, etc ...

Voilà, tu devrais pouvoir mettre cela en place.
1 - modification du programme actuel
2 - écriture d'un autre petit programme pour remettre bout à bout tous les
fichiers client.

Je te laisse chercher un peu avant d'écrire quelque chose ? ;-)
A plus tard.


Bonjour,
Faute d'ouragan je me suis penché sur la méthode tiré par les cheuveux
(Excellent je ne connaissais pas cette expression, pas du tout utilisée aux
antilles !!!).
J'ai rajouté la variable code postal dans le code que vous m'avez fourni:

Sub AppendTempFile(iPageCount)
Set oBase = oFSO.OpenTextFile(sPath & sDstFileName & iPageCount &
iCodePostal, ForAppending, True, TristateFalse)
Set oTmp = oFSO.OpenTextFile(sPath & sTmpFileName, ForReading, False,
TristateFalse)
oBase.Write oTmp.ReadAll
oBase.Close
oTmp.Close
End Sub

If Left(sLine, 5) = "00001" Then
iPageNum = CInt(Mid(sLine, 50, 5))
iCodePostal = Mid(sline, 75, 5)
If iPrevPage <> 0 And iPageNum = 1 Then
oTmpTextStream.Close
AppendTempFile iPrevPage
Set oTmpTextStream = oFSO.OpenTextFile(sPath & sTmpFileName, ForWriting,
True, TristateFalse)
End If
iPrevPage = iPageNum
End if

J'obtiens donc en sortie un gloubilboulga dans un fichier texte. J'essaye
d'analyser cela et je vous tiens au courant, mais cela m'a l'air trés mal
partie.
Gilles


J'ai oublié la suite:
Aprés en ligne de commande CMD COPY SGED* T_SG.txt
Le résultat est déroutant rien n'est trié




Avatar
Fred
Dans son message
---DGI972--- nous dit :

[...]

Bonjour,
Faute d'ouragan je me suis penché sur la méthode tiré par les
cheuveux (Excellent je ne connaissais pas cette expression, pas du
tout utilisée aux antilles !!!).
J'ai rajouté la variable code postal dans le code que vous m'avez
fourni:



Maintenant, il s'agit de créer un fichier par client. Attention, le code
client que j'ai évoqué est très important !
Je suppose que tu as ce genre d'infos dans ta ligne qui commence par
000001.

J'ai fait quelques modifs dans le fichier en pièce jointe.


J'ai oublié la suite:
Aprés en ligne de commande CMD COPY SGED* T_SG.txt


Je ne vois pas pourquoi cette commande ? Relis bien mon post. Je t'ai
proposé un DIR (qui normalement est trié) avec ce qu'on appelle une
redirection dans un fichier texte. Autrement dit, ce qui s'affiche à
l'écran ira dans un fichier (et plus à l'écran).
Dans ce fichier figurera donc la liste triée de tous les fichiers
clients créés (seulement les noms de fichier, grâce au /B).

On fait donc faire le tri par le système. N'est ce pas l'idéal ;-) ?

Soit tu fais cette commande dans le script avec un Shell.Run, mais bon.
Pour une manip qui est faite une fois par mois, tu peux aussi le taper
directement en ligne de commande.

Reste à écrire un petit script qui récupère cette liste de fichiers et
les concatène.

(j'ai laissé dans le script ce qui fonctionnait déjà, tu pourras
l'enlever quand cette nouvelle version sera au point)



--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
---DGI972---
Le 15/07/2005, Fred a supposé :
Dans son message uSf7J$
Fred nous dit :

Et la pièce jointe que j'avais oubliée


Bonjour,
Je reviens à la charge avec mon Pb:
OK j'abandonne l'idée de créer des fichiers par pages et par code
postaux. Les fichiers de sortie sont faux donc la concaténation est
fausse aussi(Je ne sais pas pourquoi car j'ai "fabriqué" des fichiers
de sortie SGEDGP175001 et dedans je n'ai le code postal de paris 1er
arrondissement).
J'ai testé votre code en rajoutant le N° de client unique qui se trouve
sur la ligne 000001. Le Script plante je ne comprends pas pourquoi.
En faisant le dir /b j'obtiens éffectivement un fichier trié.
J'en fais quoi avec ????.
Le fichier Spool est livré trié par N° de client et non pas par ordre
alphabétique ni par code postal.Il n'y a aucune logique entre le trie
alphabétique et le trie par code postal.
Je suis complètement perdu !!

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

Avatar
Fred
Dans son message
---DGI972--- nous dit :

Le 15/07/2005, Fred a supposé :
Dans son message uSf7J$
Fred nous dit :

Et la pièce jointe que j'avais oubliée


Bonjour,
Je reviens à la charge avec mon Pb:
OK j'abandonne l'idée de créer des fichiers par pages et par code
postaux. Les fichiers de sortie sont faux donc la concaténation est
fausse aussi(Je ne sais pas pourquoi car j'ai "fabriqué" des fichiers
de sortie SGEDGP175001 et dedans je n'ai le code postal de paris 1er
arrondissement).
J'ai testé votre code en rajoutant le N° de client unique qui se
trouve sur la ligne 000001. Le Script plante je ne comprends pas
pourquoi. En faisant le dir /b j'obtiens éffectivement un fichier
trié.
J'en fais quoi avec ????.
Le fichier Spool est livré trié par N° de client et non pas par ordre
alphabétique ni par code postal.Il n'y a aucune logique entre le trie
alphabétique et le trie par code postal.
Je suis complètement perdu !!


Bonjour,
Peux-tu m'envoyer un fichier spool d'exemple que je puisse finaliser le
script ?
Une dizaine de clients dont tu auras masqué les infos confidentielles.
Quelques codes postaux identiques dans le lot.
Des clients à 1, 2 ou 3 pages si possible.
L'important est de garder le même nombre de caractères dans les lignes
"stratégiques".
Envoie ça directement à mon adresse ci-dessous et je jetterai un oeil.
On y est presque à mon avis :-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
---DGI972---
Fred a couché sur son écran :
Dans son message
---DGI972--- nous dit :

Le 15/07/2005, Fred a supposé :
Dans son message uSf7J$
Fred nous dit :

Et la pièce jointe que j'avais oubliée


Bonjour,
Je reviens à la charge avec mon Pb:
OK j'abandonne l'idée de créer des fichiers par pages et par code
postaux. Les fichiers de sortie sont faux donc la concaténation est
fausse aussi(Je ne sais pas pourquoi car j'ai "fabriqué" des fichiers
de sortie SGEDGP175001 et dedans je n'ai le code postal de paris 1er
arrondissement).
J'ai testé votre code en rajoutant le N° de client unique qui se
trouve sur la ligne 000001. Le Script plante je ne comprends pas
pourquoi. En faisant le dir /b j'obtiens éffectivement un fichier trié.
J'en fais quoi avec ????.
Le fichier Spool est livré trié par N° de client et non pas par ordre
alphabétique ni par code postal.Il n'y a aucune logique entre le trie
alphabétique et le trie par code postal.
Je suis complètement perdu !!


Bonjour,
Peux-tu m'envoyer un fichier spool d'exemple que je puisse finaliser le
script ?
Une dizaine de clients dont tu auras masqué les infos confidentielles.
Quelques codes postaux identiques dans le lot.
Des clients à 1, 2 ou 3 pages si possible.
L'important est de garder le même nombre de caractères dans les lignes
"stratégiques".
Envoie ça directement à mon adresse ci-dessous et je jetterai un oeil.
On y est presque à mon avis :-)


C'est fait merci

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



1 2