Limite des 9 paramètres
Posté : 18 oct. 2012 19:11
Bonjour,
Je viens vous demander de l'aide sur un petit batch.
J'ai un petit script qui permet de faire une recherche dans un fichier et découper ce fichier en n fichiers.
Le fichier possède des lignes qui comporte un nom, un mail, et un numéro de commandes.
On doit dispatcher toutes ces lignes dans n fichiers tant qu'on respecte la condition suivante : on ne retrouve jamais une ligne de commande avec une même adresse mail dans un des fichiers
Voilà un exemple (car vous ne devez rien comprendre):
dans mon fichier initial
Dupond|dupond@gmail.com|0001
Martin|martin@gmail.com|0002
Pierre|pierre@gmail.com|0003
Dupond|dupond@gmail.com|0004
Dupond|dupond@gmail.com|0005
Olivier|olivier@gmail.com|0006
Pierre|pierre@gmail.com|0007
il faut transformer ce fichier en 3 fichiers
fichier 1 :
Dupond|dupond@gmail.com|0001
Martin|martin@gmail.com|0002
Pierre|pierre@gmail.com|0003
Olivier|olivier@gmail.com|0006
fichier 2
Dupond|dupond@gmail.com|0004
Pierre|pierre@gmail.com|0007
fichier 3
Dupond|dupond@gmail.com|0005
J'ai un script qui réalise cette opération parfaitement:
(Merci minnesota du forum developpez.com...)
J'ai essayé de modifier ce script pour l'adapter a un autre fichier. Mon second fichier possède 15 colonnes, et la colonne de "recherche" (avec le mail) se situe à la 10ème.
J'ai compris comment choisir la colonne sur un fichier de colonnes. Par exemple je sais traiter un fichier de 5colonnes avec le mail situé à la 4eme.
Par contre dans mon cas , cela ne fonctionne plus car on ne peut pas passer plus de 9 paramètres. Je crois que la méthode SHIFT permet ed jouer avec le nombre de parametre mais je ne sais pas du tout comment faire.
Voilà ce que je comptais faire pour adapter le script :
@echo off
Mais ca ne fonctionne pas, a cause de ces 9 paramètres max.
Voilà mon problème.. j'espere avoir été clair...
Une solution?
Je viens vous demander de l'aide sur un petit batch.
J'ai un petit script qui permet de faire une recherche dans un fichier et découper ce fichier en n fichiers.
Le fichier possède des lignes qui comporte un nom, un mail, et un numéro de commandes.
On doit dispatcher toutes ces lignes dans n fichiers tant qu'on respecte la condition suivante : on ne retrouve jamais une ligne de commande avec une même adresse mail dans un des fichiers
Voilà un exemple (car vous ne devez rien comprendre):
dans mon fichier initial
Dupond|dupond@gmail.com|0001
Martin|martin@gmail.com|0002
Pierre|pierre@gmail.com|0003
Dupond|dupond@gmail.com|0004
Dupond|dupond@gmail.com|0005
Olivier|olivier@gmail.com|0006
Pierre|pierre@gmail.com|0007
il faut transformer ce fichier en 3 fichiers
fichier 1 :
Dupond|dupond@gmail.com|0001
Martin|martin@gmail.com|0002
Pierre|pierre@gmail.com|0003
Olivier|olivier@gmail.com|0006
fichier 2
Dupond|dupond@gmail.com|0004
Pierre|pierre@gmail.com|0007
fichier 3
Dupond|dupond@gmail.com|0005
J'ai un script qui réalise cette opération parfaitement:
Code : Tout sélectionner
@echo off
for /f "tokens=1,2,* delims=^|" %%i in (tonfichier.csv) do call :trie "%%~i" "%%~j" "%%~k"
for %%i in (%dynVar%) do set %%~i=
echo.
pause
goto :eof
:trie
set /a %~2+=1
call set id=%%%~2%%
if %id% leq 1 set dynVar=%dynVar% %~2
echo %~2-^>fichier%id%.txt
(echo %~1^|%~2^|%~3)>>fichier%id%.txt
goto :eof
J'ai essayé de modifier ce script pour l'adapter a un autre fichier. Mon second fichier possède 15 colonnes, et la colonne de "recherche" (avec le mail) se situe à la 10ème.
J'ai compris comment choisir la colonne sur un fichier de colonnes. Par exemple je sais traiter un fichier de 5colonnes avec le mail situé à la 4eme.
Par contre dans mon cas , cela ne fonctionne plus car on ne peut pas passer plus de 9 paramètres. Je crois que la méthode SHIFT permet ed jouer avec le nombre de parametre mais je ne sais pas du tout comment faire.
Voilà ce que je comptais faire pour adapter le script :
@echo off
Code : Tout sélectionner
for /f "tokens=1-15 delims=^|" %%i in (Mail_expeditions.csv) do call :trie "%%~i" "%%~j" "%%~k" "%%~l" "%%~m" "%%~n" "%%~o" "%%~p" "%%~q" "%%~r" "%%~s" "%%~t" "%%~u" "%%~v" "%%~w"
for %%i in (%dynVar%) do set %%~i=
echo.
pause
goto :eof
:trie
echo %~1^|%~2^|%~3^|%~4^|%~5^|%~6^|%~7^|%~8^|%~9^|%~10^|%~11^|%~12^|%~13^|%~14^|%~15
set /a %~10+=1
call set id=%%%~10%%
if %id% leq 1 set dynVar=%dynVar% %~10
echo %~10-^>fichier%id%.txt
(echo %~1^|%~2^|%~3^|%~4^|%~5^|%~6^|%~7^|%~8^|%~9^|%~10^|%~11^|%~12^|%~13^|%~14^|%~15)>>fichier%id%.txt
goto :eof
Voilà mon problème.. j'espere avoir été clair...
Une solution?