Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Lecture/ecriture de données dans des fichiers

Sgane, le jeudi 21 février 2008 à 17:49:42
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.
Configuration: Windows XP
Firefox 2.0.0.12
Répondre à Sgane  Signaler ce message aux modérateurs Aller au dernier message

1


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le jeudi 21 février 2008 à 19:49:15
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...
Répondre à carbon3

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 10:19:26
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
Répondre à Sgane

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 10:25:24
Oups!

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

Raynald
Répondre à Sgane

4


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 10:52:38
slt

L'erreur Mid semble être provoquée par la présence de ligne vide à la fin du fichier.xsr
Peut-on les éviter ?
Répondre à carbon3

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 11:02:23
En fait, je viens de me rendre compte, que les espaces en surnombres ont étaient supprimé, il y en a plus entre les valeurs...
Répondre à Sgane

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 11:00:17
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
Répondre à Sgane

7


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 11:08:18
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 =~"
Répondre à carbon3

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 11:15:46
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 ?
Répondre à carbon3

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 11:23:07
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.
Répondre à Sgane

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 12:16:14
J'ai repris le fichier.xsr

pour en réduire le nombre d'espace.

http://sgane.chez-alice.fr/1_dstv/modif.xsr
Répondre à Sgane

11


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 12:27:24
ok, merci, j'y suis presque...
Répondre à carbon3

12


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 12:59:22
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
Répondre à carbon3

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 13:54:56
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?
Répondre à Sgane

14


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 14:07:18
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
Répondre à carbon3

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 14:24:13
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!
Répondre à Sgane

15


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 14:22:10
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)
Répondre à carbon3

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 14:26:35
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??
Répondre à Sgane

18


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 14:37:04
j'utilise la dernière version xsr, celle avec moins d'espaces.
... to be continued
Répondre à carbon3

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 14:46:55
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??
Répondre à Sgane

20


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 14:57:17
Il ne te reste qu'à valider le problème comme étant résolu...
bonne continuation
Répondre à carbon3

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 15:21:57
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
Répondre à Sgane

22


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 17:09:44
petite modif et ajout de l'option nettoyage
.../...
  loop
  infile.close
  dacopy.close

  cleanorifile=FSO.DeleteFile(linkto)

loop

modifier.close
.../...

test ok chez moi
Répondre à carbon3

23


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 22 février 2008 à 18:25:46
Encore dans le mille.

BRAVO!!!

Merci!
Répondre à Sgane

24


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le vendredi 22 février 2008 à 18:40:12
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+
Répondre à carbon3

25


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le jeudi 28 février 2008 à 11:03:42
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 =~"
Répondre à Sgane

26


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le jeudi 28 février 2008 à 15:11:55
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.
Répondre à carbon3

27


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le jeudi 28 février 2008 à 18:27:00
j'ai hâte , j'ai hâte!!!!

Encore un grand merci!
Répondre à Sgane

28


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le jeudi 28 février 2008 à 18:28:30
il est prêt, je règle juste un détail
Répondre à carbon3

29


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
carbon3, le jeudi 28 février 2008 à 19:03:21
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)
Répondre à carbon3

30


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Sgane, le vendredi 29 février 2008 à 08:33:01
Ouahhh!

Ça marche nikel!

Vraiment , mais vraiment merci.

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

Du grand art!

Raynald.
Répondre à Sgane

31


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 carbon3, le vendredi 29 février 2008 à 08:36:12
C'était un plaisir !
Bonne journée
Répondre à carbon3