Limite des 9 paramètres

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
faulkico
Batcheur occasionnel
Messages : 1
Enregistré le : 18 oct. 2012 19:03

Limite des 9 paramètres

Message par faulkico »

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:

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
(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

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
Mais ca ne fonctionne pas, a cause de ces 9 paramètres max.

Voilà mon problème.. j'espere avoir été clair...

Une solution?
Répondre