Lecture/ecriture de données dans des fichiers
Résolu
Sgane
-
carbon3 Messages postés 471 Statut Membre -
carbon3 Messages postés 471 Statut Membre -
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.
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:
- Lecture/ecriture de données dans des fichiers
- Écriture facebook - Guide
- Renommer des fichiers en masse - Guide
- Trier des données excel - Guide
- Ecriture en gras - Guide
- Lecture fichier epub - Guide
17 réponses
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 ;-)
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 =~"
slt
L'erreur Mid semble être provoquée par la présence de ligne vide à la fin du fichier.xsr
Peut-on les éviter ?
L'erreur Mid semble être provoquée par la présence de ligne vide à la fin du fichier.xsr
Peut-on les éviter ?
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
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...
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...
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
j'ai pris pour base que les fichiers.nc1 ne dépassent pas 6 caractères
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
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)
Il ne reste plus qu'à faire correspondre modif.xsr et le contenu de DSTV
(je l'aurai, un jour, je l'aurai... :o)
petite modif et ajout de l'option nettoyage
test ok chez moi
.../... loop infile.close dacopy.close cleanorifile=FSO.DeleteFile(linkto) loop modifier.close .../...
test ok chez moi
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.
tu penses bien que je vais y travailler...
Je t'envoie la fonction dès qu'elle est vérifiée opérationnelle.
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
... Et c'est môa qui l'aie fait... ;o)
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)
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
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
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 ?
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 ?
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.
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.
J'ai repris le fichier.xsr
pour en réduire le nombre d'espace.
http://sgane.chez-alice.fr/1_dstv/modif.xsr
pour en réduire le nombre d'espace.
http://sgane.chez-alice.fr/1_dstv/modif.xsr
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+
Pour ce qui est de marquer le problème comme étant résolu, c'est moi qui ait besoin d'aide :-)
A+
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 =~"
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 =~"