modification fichier

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
lolo974
Batcheur occasionnel
Messages : 3
Enregistré le : 21 mars 2011 11:50

modification fichier

Message par lolo974 »

Bonjour j'aurrais besoins d'aide pour transformer un fichier .txt en un autre
exemple source :
Code article Libellé Type d'article PV HT Unité
0000000000000001 CIMENT SUR PLACE 0 5.00000000 SAC 25kg

a transformer en :
001,0001,1EEEEEEEEEEE,00000500,CIMENT SUR PLACE,00002000,050002,0000,0000,00,00002300,0000002530

Merci beaucoup par avance !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Joe cateline
Batcheur débutant
Messages : 27
Enregistré le : 07 mars 2011 21:48

Re: modification fichier

Message par Joe cateline »

Salut Lolo !

Si je comprend bien, tu désires changer le contenu d'un fichier "txt" existant en un autre, j'utilise cette commande :

Code : Tout sélectionner

echo le texte de remplacement > C:\fichier\texte\existant.txt
La syntaxe " > " permet d'envoyer "le texte de remplacement" dans le fichier "txt" nommé, si le fichier existe déja, il sera alors remplacé.
Remplace la syntaxe " > " par " >> " et le fichier "txt" existant ne sera pas remplacé mais "le texte de remplacement" sera ajouté à la fin du texte.
lolo974
Batcheur occasionnel
Messages : 3
Enregistré le : 21 mars 2011 11:50

Re: modification fichier

Message par lolo974 »

salut Joe!
et bien en fait je recupere des information tels que le nom , le prix des articles je doit mettre tous ca dans un autre fichier de forme différente .

exemple :
Code article Libellé Type d'article PV HT Unité
0000000000000001 CIMENT SUR PLACE 0 5.00000000 SAC 25kg
0000000000000123 Colle a bois extra f 0 3.80000000 SAC 5kg
0000000000011565 CIMENT colle gris 0 9.50000000 SAC 25kg
...

a transformer en :
001,0001,1EEEEEEEEEEE,00000500,CIMENT SUR PLACE,00002000,050002,0000,0000,00,00002300,0000002530
001,0001,123EEEEEEEEE,00000380,Colle a bois extra f,00002000,050002,0000,0000,00,00002300,0000002530
001,0001,11565EEEEEEE,00000950,CIMENT colle gris ,00002000,050002,0000,0000,00,00002300,0000002530
...

le fichier de l'exemple peut etre de differente longeur.
et la premiere ligne est a supprimer pour la transformation.
Voila plus precisement la definition de mon soucis.

Merci ! beaucoup ! Man !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Joe cateline
Batcheur débutant
Messages : 27
Enregistré le : 07 mars 2011 21:48

Re: modification fichier

Message par Joe cateline »

Je pense comprendre, tu reçois un fichier texte avec des libellés que tu veux convertir en un code associer.
Evidemment tu ne veux convertir uniquement les lignes présentes et non l’ensemble des codes existant.

Je t'es fais un batch qui vérifie si les libellés sont présents et si oui, il ajoute dans un document texte (j'ai nommé "reference") la référence associer. Tu exécute donc le batch au même endroit que ton fichier "codes libelles.txt" (sans accents) et un fichier "reference.txt" apparaît contenant uniquement les références associer aux libellés.

mais tu devra tout de même configurer le batch en entrant toutes les références, voici le bat avec commentaires :

Code : Tout sélectionner

rem ici entre le code libellé de l'article
find "0000000000000001 CIMENT SUR PLACE 0 5.00000000 SAC 25kg" "codes libelles.txt" 

rem si la commande find ne trouve rien alors errorlevel = 1
rem donc aller à la recherche suivante
rem modifis l'étiquette next01 en next02, 03 etc... à chaque nouvelle références
if ERRORLEVEL=1 goto next01

rem enregistrement de la référence dans le fichier "references.txt"
rem ici entre la référence associer
echo 001,0001,1EEEEEEEEEEE,00000500,CIMENT SUR PLACE,00002000,050002,0000,0000,00,00002300,0000002530 >> "reference.txt"

rem modifis l'étiquette next01 en next02, 03 etc... à chaque nouvelle références
:next01

rem reconfiguration de errorlevel = 0 pour éviter de sauter les autres recherches
set ERRORLEVEL=0

rem on recommence la même procédure pour toutes les autres références
find "0000000000000123 Colle a bois extra f 0 3.80000000 SAC 5kg" "codes libelles.txt" 
if ERRORLEVEL=1 goto next02
echo 001,0001,123EEEEEEEEE,00000380,Colle a bois extra f,00002000,050002,0000,0000,00,00002300,0000002530 >> "reference.txt"
:next02
set ERRORLEVEL=0
find "0000000000011565 CIMENT colle gris 0 9.50000000 SAC 25kg" "codes libelles.txt" 
if ERRORLEVEL=1 goto next03
echo 001,0001,11565EEEEEEE,00000950,CIMENT colle gris ,00002000,050002,0000,0000,00,00002300,0000002530 >> "reference.txt"
:next03

rem à toi de continuer à entrer toutes les références et codes libellés de tout tes articles
rem sans oublier de modifier l'étiquette next à chaque fois
 
Ça marche mais si quelqu'un sait simplifier la chose ça m'intéresse aussi. En espérant t'avoir aidé !
lolo974
Batcheur occasionnel
Messages : 3
Enregistré le : 21 mars 2011 11:50

Re: modification fichier

Message par lolo974 »

salut joe!!!!!
tout d'abord Merci de m accorder tes lumieres.
et ben en fait j 'ai au bas mot 20 000 articles donc autant de ligne ce qui serait enorme.
il n'aurait pas un moyen de lire le premier fichier et creer le deuxieme ensuite.
Un style de délimitation de champs.
exemple 0000000000000001 CIMENT SUR PLACE 0 5.00000000 SAC 25kg
0000000000000001 c'est le code (longeur 16 car)
CIMENT SUR PLACE c'est la désignation (longeur 24 car)
5.00000000 c'est le prix (longeur 10 car)

et le transformer donc dans le second fichier par
001,0001,code,prix,designation,00002000,050002,0000,0000,00,00002300,0000002530

merci de me repondre joe!!!!!!
Joe cateline
Batcheur débutant
Messages : 27
Enregistré le : 07 mars 2011 21:48

Re: modification fichier

Message par Joe cateline »

Ha oui 20 000 ça fait beaucoup !!!

Mais maintenant que tu m'as décrit les codes, c'est simple avec quelques découpes de variable, je suis sur le coup !
Joe cateline
Batcheur débutant
Messages : 27
Enregistré le : 07 mars 2011 21:48

Re: modification fichier

Message par Joe cateline »

Up ! Je ne tes pas oublié Lolo. J'ai pratiquement finis mais il me manque quelque chose...

Ce script découpe chaque lignes du texte pour les découper à leur tour puis les transformer en codes dans le fichier initial.
J'utilise dans ma boucle for "skip=%count%" pour sauter les premières lignes déjà traitées, à chaque boucle count=count+1 mais je ne sais pas comment isoler la ligne seul car avec skip, je saute à la ligne voulu mais je traite aussi toutes les suivantes en même temps, il me faudrait une commande du style "skip" mais inversée pour prendre en "étau" toutes les lignes une par une...

Je post tout de même le script malgré qu'il ne fonctionne pas et j'appel à l'aide celui qui pourra nous aider.

Code : Tout sélectionner

@echo off
set count=1
:boucle
for /f "skip=%count% tokens=1,2,3,4,5,6 delims= " %%a in (libelle.txt) do (
  set code=%%a
  set code=%code:~4,12%
  if not %code:~0,1% EQU 0 set code=%code%
  if %code:~11,1% EQU E goto next
  if not %code:~1,1% EQU 0 set code=%code:~1,11%E
  if %code:~11,1% EQU E goto next
  if not %code:~2,1% EQU 0 set code=%code:~2,10%EE
  if %code:~11,1% EQU E goto next
  if not %code:~3,1% EQU 0 set code=%code:~3,9%EEE
  if %code:~11,1% EQU E goto next
  if not %code:~4,1% EQU 0 set code=%code:~4,8%EEEE
  if %code:~11,1% EQU E goto next
  if not %code:~5,1% EQU 0 set code=%code:~5,7%EEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~6,1% EQU 0 set code=%code:~6,6%EEEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~7,1% EQU 0 set code=%code:~7,5%EEEEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~8,1% EQU 0 set code=%code:~8,4%EEEEEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~9,1% EQU 0 set code=%code:~9,3%EEEEEEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~10,1% EQU 0 set code=%code:~10,2%EEEEEEEEEE
  if %code:~11,1% EQU E goto next
  if not %code:~11,1% EQU 0 set code=%code:~11,1%EEEEEEEEEEE
)
:next
for /f "skip=%count% tokens=1,2,3,4,5,6,7,8 delims= " %%a in (libelle.txt) do (
  set des=%%a
  set des1=%%b
  set des2=%%c
  set des3=%%d
  set des4=%%e
  set des5=%%f
  set des6=%%g
  set des7=%%h
  if %des2% EQU 0 set desg=%des1%
  if %des3% EQU 0 set desg=%des1% %des2%
  if %des4% EQU 0 set desg=%des1% %des2% %des3%
  if %des5% EQU 0 set desg=%des1% %des2% %des3% %des4%
  if %des6% EQU 0 set desg=%des1% %des2% %des3% %des4% %des5%
  if %des7% EQU 0 set desg=%des1% %des2% %des3% %des4% %des5% %des6%
)
for /f "skip=%count% tokens=1,2,3,4,5,6,7,8 delims= " %%a in (libelle.txt) do (
  set lim=%%a
  set lim1=%%b
  set lim2=%%c
  set lim3=%%d
  set lim4=%%e
  set lim5=%%f
  set lim6=%%g
  set lim7=%%h
  if %lim2% EQU 0 set prix=%lim3%
  if %lim3% EQU 0 set prix=%lim4%
  if %lim4% EQU 0 set prix=%lim5%
  if %lim5% EQU 0 set prix=%lim6%
  if %lim6% EQU 0 set prix=%lim7%
  If %prix:~1,1% EQU . set prix=00000%prix:~0,1%%prix:~2,2%
  If %prix:~2,1% EQU . set prix=0000%prix:~0,2%%prix:~3,2%
  If %prix:~3,1% EQU . set prix=000%prix:~0,3%%prix:~4,2%
  If %prix:~4,1% EQU . set prix=00%prix:~0,4%%prix:~5,2%
  If %prix:~5,1% EQU . set prix=0%prix:~0,5%%prix:~6,2%
  If %prix:~6,1% EQU . set prix=%prix:~0,6%%prix:~7,2%
)
echo 001,0001,%code%,%prix%,%desg%,000020000,050002,0000,0000,00,00002300,0000002530 >> "references.txt"
set/a count=%count% + 1
goto boucle
Répondre