Lecture/ecriture de données dans des fichiers

Résolu/Fermé
Sgane - 21 févr. 2008 à 17:49
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 - 29 févr. 2008 à 08:36
Bonjour,

J'aurais besoin d'une aide en programmation.

Dans le cadre de mon travail, je doit reprendre une grande série de fichier pour en modifié une ligne.

Ce sont des fichiers de commande numérique pour un atelier, et la norme DSTV qui régis ces fichier ne place pas la valeur que je souhaiterais et je doit donc la remplacer à la main, quand il y en à 5 ou 6, ça va, mais mes projets finis donnent en moyenne une 50aine de fichiers...

Un vrai calvaire!!!

Mais je sais demander au logiciel de me faire un tableau de 2 colonnes avec en 1er le nom du fichier (sans extension, mais cela sera toujours un .nc1) et en 2 l'information à recopier. Dans un fichier .xsr ouvrable avec un notepad.

Donc, j'aimerais à partir d'un tableau qui comporte 2 colonnes, du type:

------------------------
CV25 ; ABC
FP19 ; ABC
GS1 ; BCD
AP12 ; BCD
etc
...
...
...
------------------------

ouvrir les fichiers qui se nomme comme le premier champ pour aller y remplacer un terme (qui se trouve à la 3éme ligne exactement) par le deuxième champ du tableau.

Dans mon exemple ci dessous, ouvrir à partir de la liste le fichier CV25.nc1 et aller y remplacer 3496 par la valeur ABC reprise du tableau.

-----------------------
ST
** CV25.nc1
3496
1
A1
A1
E24-2
2
PL220*10
B
-----------------------

ce qui donnerais un fois fait :

-----------------------
ST
** CV25.nc1
ABC
1
A1
A1
E24-2
2
PL220*10
B
-----------------------

Et ainsi de suite jusqu'a la fin de la liste.

Je sais pas si c'est assez clair??

Ensuite, créer des répertoire relatif à ces textes remplacés ( ABC et BCD dans l'exemple) et trier les fichier pour les distribuer dans chaque répertoire.

Si quelqu'un pouvait me venir en aide, il m'ôterait une très grosse (énorme même...) épine du pied!

Merci d'avance.

Raynald.
A voir également:

17 réponses

carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 11:08
alors voilà le code qui créer les copies dans chaque répertoire idoine.
fichier.vbs et fichier.xsr sont au même niveau que rep DSTV
il ne restera plus qu'à décider de la suppression des sources dans le DSTV qd on sera sûr du résultat ;-)
dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim modifier: set modifier = FSO.opentextfile("modif.xsr",1)

do while not modifier.atendofstream
lect = modifier.readline
separateur=InStr(lect, ";")
dafile=Mid(lect,1,separateur-2)
dafile=dafile & ".nc1"
damod=Mid(lect,separateur+2)
if FSO.FolderExists("DSTV\"+damod)<>true then
makit=FSO.CreateFolder("DSTV\"+damod)
end if

set tempfold = FSO.GetFolder("DSTV\"+damod)

set infile = FSO.opentextfile("DSTV\"+dafile,1)
	
set dacopy = FSO.opentextfile(tempfold+"\"+dafile,8,true)
nbrline=0
	
do while not infile.atendofstream
readline = infile.readline
nbrline=nbrline+1
if nbrline=3 then
dacopy.writeline(damod)
else
dacopy.writeline(readline)
end if
loop
loop
modifier.close
infile.close
dacopy.close
msgbox "~=. Modifications terminées  .=~",64,"~= NC1 Modif =~"
3
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 10:52
slt

L'erreur Mid semble être provoquée par la présence de ligne vide à la fin du fichier.xsr
Peut-on les éviter ?
2
En fait, je viens de me rendre compte, que les espaces en surnombres ont étaient supprimé, il y en a plus entre les valeurs...
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
21 févr. 2008 à 19:49
slt
si tu place le fichier.vbs dans le répertoire qui contient les fichier.nc1
tu obtiendras un répertoire contenant les copies modifiées de tout les fichiers.nc1
Dans un deuxième temps, je peux coder le remplacement des originaux par les copies.
Mais, comme je l'ai dit, pour l'instant c'est fonctionnel si tous les fichiers.nc1 sont dans le même répertoire.
Sinon, je vais avoir besoin de plus d'info sur la hierarchie ;-p

voici le code à insérer dans un fichier modifier_nc1.vbs
dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim modifier: set modifier = FSO.opentextfile("modif.xsr",1)
set tempfold = FSO.CreateFolder("nc1_copy")
do while not modifier.atendofstream
lect = modifier.readline
separateur=InStr(lect, ";")
dafile=Mid(lect,1,separateur-2)
dafile=dafile & ".nc1"
damod=Mid(lect,separateur+2)
set infile = FSO.opentextfile(dafile,1)
	
set dacopy = FSO.opentextfile(tempfold+"\"+dafile,8,true)
nbrline=0
	
do while not infile.atendofstream
readline = infile.readline
nbrline=nbrline+1
if nbrline=3 then
dacopy.writeline(damod)
else
dacopy.writeline(readline)
end if
loop
loop
modifier.close
infile.close
dacopy.close
msgbox "~=. Modifications terminées  .=~",64,"~= NC1 Modif =~"

Ensuite, pour la création des répertoire relatifs aux modifs, sont-ce les copies modifiées des fichiers.nc1 que tu veux envoyer dedans ?
Il reste toujours la question de savoir où créer les répertoires...
1
Merci pour ta précieuse aide.

Effectivement, tous le fichiers .nc1 sont dans le même répertoire, nommé DSTV, le fichier .xsr est au même rang que ce répertoire. Il me faudra juste placer le .vbs au bon endroit ( la ou cela te semblera le plus judicieux ).

Pour les répertoires destination, ils se nommeront comme les modifs ( ABC, BCD, ... dans l'exemple ), et leur emplacement peut être dans le répertoire DSTV.

Au final, c'est vrai que les fichiers.nc1 source peuvent être supprimé, mais c'est pas obligatoire.

Cependant, j'ai bien fais comme tu le dis, mais j'ai une erreur :

Windows me dit :

----------------
Script : chemin\modifier_nc1.vbs
Ligne : 7
Caract. : 1
Erreur : Argument ou appel de procédure incorrect :'Mid'
Code : 800A0005
Source : Erreur d'exécution microsoft VBScript
----------------

Merci encore!!

Raynald
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 12:27
ok, merci, j'y suis presque...
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 12:59
bon, alors à ce stade tout devrait fonctionner
mon test bloque sur L1.nc1 parce qu'il n'est pas dans DSTV
les fichiers manquants dans DSTV génèrent une erreur
L1-L2...L18->L22 etc... il semble qu'il en manque pas mal ;-(
à partir de là, il faudra effacer les répertoires créés avant de pouvoir relancer la procédure
dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim modifier: set modifier = FSO.opentextfile("modif3.xsr",1)

do while not modifier.atendofstream
lect = modifier.readline
separateur=InStr(lect, ";")

dim recurs:recurs=7
dim linkto:linkto=""
do while FSO.FileExists(linkto)<>true
recurs=recurs-1
dafile=Mid(lect,3,recurs)
dafile=dafile & ".nc1"
linkto="DSTV\"+dafile
'msgbox dafile
loop

damod=Mid(lect,separateur+2)

if FSO.FolderExists("DSTV\"+damod)<>true then
makit=FSO.CreateFolder("DSTV\"+damod)
end if

set tempfold = FSO.GetFolder("DSTV\"+damod)

set infile = FSO.opentextfile("DSTV\"+dafile,1)

set dacopy = FSO.opentextfile(tempfold+"\"+dafile,8,true)
nbrline=0
	
do while not infile.atendofstream
readline = infile.readline
nbrline=nbrline+1
if nbrline=3 then
dacopy.writeline(damod)
else
dacopy.writeline(readline)
end if
loop

loop
modifier.close
infile.close
dacopy.close

msgbox "~=. Modifications terminées  .=~",64,"~= NC1 Modif =~"


j'ai pris pour base que les fichiers.nc1 ne dépassent pas 6 caractères
1
Nickel, quel rapidité!!

Mais, j'ai toujours la même erreur, le 'mid' de la ligne 12.

dafile=Mid(lect,3,recurs)

Cela vient de moi?
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73 > Sgane
22 févr. 2008 à 14:07
C'est l'erreur qui remonte quand un fichier.nc1 n'est pas dans le répertoire DSTV mais existe en tant que fichier à modifier dans modif.xsr
0
Sgane > carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013
22 févr. 2008 à 14:24
Bon, je viens de vider le répertoire DSTV pour ne laisser qu'un seul fichier, et j'ai fait de même avec la liste.

Ben, toujours la même erreur!

désolé, je suis chiant!
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 14:22
j'ai vérifié le process en supprimant de modif.xsr les fichiers qui ne sont pas dans DSTV et j'arrive au bout...
Il ne reste plus qu'à faire correspondre modif.xsr et le contenu de DSTV
(je l'aurai, un jour, je l'aurai... :o)
1
arf, j'ai répondu au dessus!!!

sinon, tu est parti de quel format du .xsr, le 1er ou le 2éme avec moins d'espaces??
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 14:37
j'utilise la dernière version xsr, celle avec moins d'espaces.
... to be continued
1
YAISSEEEEEE!!

J'ai trouvé, c'est la première ligne vierge qui met le bazar!

Donc, un ENORME merci!

Du grand, du bon boulot!!

Tu me retires un poids de travail considérable!!!!!

Comment te remercier??
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 14:57
Il ne te reste qu'à valider le problème comme étant résolu...
bonne continuation
1
oh oh!!!

Comme je ne me suis pas enregistré, je suis en anonyme, je ne peux pas éditer en "résolu"...

Et en plus, est ce qu'on peut ajouter la suppression des fichiers d'origine dans DSTV??

Merci d'avance!

Raynald
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 17:09
petite modif et ajout de l'option nettoyage
.../...
  loop
  infile.close
  dacopy.close

  cleanorifile=FSO.DeleteFile(linkto)

loop

modifier.close
.../...

test ok chez moi
1
Encore dans le mille.

BRAVO!!!

Merci!
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
28 févr. 2008 à 15:11
Salut Sgane,
tu penses bien que je vais y travailler...
Je t'envoie la fonction dès qu'elle est vérifiée opérationnelle.
1
j'ai hâte , j'ai hâte!!!!

Encore un grand merci!
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73 > Sgane
28 févr. 2008 à 18:28
il est prêt, je règle juste un détail
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
28 févr. 2008 à 19:03
Ca yest, c'est prêt.
Bon je te remets tout le code parce qu'il a fallu que je change de stratégie.
Les liste des fichiers manquants est stockée dans M_DSTV(date et heure).txt au même niveau que modifs.xsr et le script.vbs
j'espère que t'auras d'aussi bons résultats que moi
dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim modifier: set modifier = FSO.opentextfile("modif.xsr",1)
dim pas_dans_rep
dajh=Cstr(Date())
hajh=Cstr(Time())

sjour=Mid(dajh,1,2)
smois=Mid(dajh,4,2)
san=Mid(dajh,7,4)
sdate=sjour+smois+san
sheure=Mid(hajh,1,2)
smin=Mid(hajh,4,2)
ssec=Mid(hajh,7,4)
stime=sheure+smin+ssec
recept_missing="M_DSTV"+sdate+stime+".txt"

do while not modifier.atendofstream
	lect = modifier.readline
	separateur=InStr(lect, ";")

	dim recurs:recurs=7
	dim linkto:linkto=""
	dim char_blank:char_blank=" "
	dim lkat:lkat=recurs
	
	do while lkat<>0
		
		'msgbox "lkat " & lkat
		recurs=recurs-1
		dafile=Mid(lect,3,recurs)
		lkat=Instr(dafile,char_blank)
		'msgbox "next tour with "+dafile
	loop
	dafile=dafile+".nc1"
	linkto="DSTV\"+dafile
	
	if  not FSO.FileExists(linkto) then
		set pas_dans_rep=FSO.opentextfile(recept_missing,8,true)
		pas_dans_rep.writeline linkto
		pas_dans_rep.close
	else

	damod=Mid(lect,separateur+2)

if FSO.FolderExists("DSTV\"+damod)<>true then
makit=FSO.CreateFolder("DSTV\"+damod)
end if

set tempfold = FSO.GetFolder("DSTV\"+damod)

set infile = FSO.opentextfile("DSTV\"+dafile,1)

set dacopy = FSO.opentextfile(tempfold+"\"+dafile,8,true)
nbrline=0
	
do while not infile.atendofstream
readline = infile.readline
nbrline=nbrline+1
if nbrline=3 then
dacopy.writeline(damod)
else
dacopy.writeline(readline)
end if
loop
infile.close
dacopy.close

cleanorifile=FSO.DeleteFile(linkto)
end if
loop
modifier.close

msgbox "~=. Modifications terminées  .=~",64,"~= NC1 Modif =~"


... Et c'est môa qui l'aie fait... ;o)
1
Ouahhh!

Ça marche nikel!

Vraiment , mais vraiment merci.

Le gain de temps avec ton code va m'être significatif!

Du grand art!

Raynald.
0
Oups!

j'ai oublié, si tu veux, je peux virer le séparateur ; de la liste.

Raynald
0
Je rajoute ceci :

Liens vers les fichiers, pour faire des tests.

les fichiers .nc1 à mettre dans un répertoire DSTV:

http://sgane.chez-alice.fr/1_dstv/DSTV.zip

Le fichier .xsr au même rang que le répertoire:

http://sgane.chez-alice.fr/1_dstv/modif.xsr

le fichier .vbs:

http://sgane.chez-alice.fr/1_dstv/modifier_nc1.vbs
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 11:15
houlala, je viens de visionner le modif.xsr ;-/
si les espaces ne peuvent être supprimés, peut-on être sûr qu'à l'avenir les xsr seront tous formatés ainsi ?
autrement je peux aussi essayer de réécrire le xsr...
comment est-il créée au départ ?
0
Oui, je te confirme que les emplacements seront toujours comme ça!

Le logiciel qui fait cette liste est en fait un éditeur de gabarit de liste et de croquis, l'emplacement de chaque champ est donc fixe.

le premier, peut varier en longueur, mais, pas plus de 6 caractères, le séparateur, lui ne bougera pas, sauf si tu veux le virer, et le dernier champ sera toujours une suite de 3 lettres.

voila!

Raynald.
0
J'ai repris le fichier.xsr

pour en réduire le nombre d'espace.

http://sgane.chez-alice.fr/1_dstv/modif.xsr
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
22 févr. 2008 à 18:40
Merci à toi de m'avoir donné l'occasion d'être utile...
Pour ce qui est de marquer le problème comme étant résolu, c'est moi qui ait besoin d'aide :-)
A+
0
Salut à tous.

Je sollicite à nouveau une aide!!

Est ce que l'on pourrais éviter le plantage quand il manque des fichiers par rapport à la liste.

Et en faire une synthèse à la fin des modifications.

On pourrais ajouter la liste des fichiers manquants avec le message de fin?

Merci d'avance!

Raynald.

je remes ici le code:

dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim modifier: set modifier = FSO.opentextfile("modif.xsr",1)

do while not modifier.atendofstream
lect = modifier.readline
separateur=InStr(lect, ";")

dim recurs:recurs=7
dim linkto:linkto=""
do while FSO.FileExists(linkto)<>true
recurs=recurs-1
dafile=Mid(lect,3,recurs)
dafile=dafile & ".nc1"
linkto="DSTV\"+dafile

loop

'msgbox dafile

damod=Mid(lect,separateur+2)

if FSO.FolderExists(damod)<>true then
makit=FSO.CreateFolder(damod)
end if

set tempfold = FSO.GetFolder(damod)

set infile = FSO.opentextfile("DSTV\"+dafile,1)

set dacopy = FSO.opentextfile(tempfold+"\"+dafile,8,true)
nbrline=0

do while not infile.atendofstream
readline = infile.readline
nbrline=nbrline+1
if nbrline=3 then
dacopy.writeline(" "+damod)
else
dacopy.writeline(readline)
end if
loop

infile.close
dacopy.close

cleanorifile=FSO.DeleteFile(linkto)

loop

modifier.close
msgbox "~=. Modifications terminées .=~",64,"~= NC1 Modif =~"
0
carbon3 Messages postés 470 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 6 janvier 2013 73
29 févr. 2008 à 08:36
C'était un plaisir !
Bonne journée
0