[Résolu] boucle for récupération de variables

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
dutty76
Batcheur occasionnel
Messages : 2
Enregistré le : 29 févr. 2008 11:36

[Résolu] boucle for récupération de variables

Message par dutty76 »

Bonjour à tous,


J'ai un petit soucis d'ordre batchiens et j'aimerais si possible faire possible à vos connaissances pour résoudre ce soucis .
Je dois faire un batch qui va lire un fichier txt où plusieurs informations m'intéressent et son délimités par un ";" .
Ensuite en récupérant ces données , je dois les insérer dans une requête SQL et au final l'écrire dans un fichier qui va comprendre mes fameuses requêtes .
Donc voila mon mini bout de code je ne vois pas pourquoi cela ne fonctionne pas il ne me marque pas d'erreur .


Code : Tout sélectionner

for /f tokens=7,8,9,10 DELIMS=; "%i IN (xx.txt) do @echo INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('%i','%j','%k','%l');>>sql.sql
donc je pense lui dire d'aller chercher dans les colonnes 7,8,9,10 délimitées par un ";" les 4 variables du fichier xx.txt puis de m'écrire la requête insert avec les variables et le faire ressortir dans mon fichier sql.sql.

Merci de votre aide
dutty76
Batcheur occasionnel
Messages : 2
Enregistré le : 29 févr. 2008 11:36

Re: boucle for récupération de variables

Message par dutty76 »

re,
Bonne nouvelle je viens de réussir il s'agissait simplement du fait que je n'avais mis qu'un seul pourcent après ma variable %i et qu'il en fallait deux ainsi qu'une apostrophe manquante.
Par contre petite extension de mon soucis, je récupère une variable de type date sous la forme dd/mm/yyyy et comme vous le savez ou l'ignorer SQL entre la date sous forme YYYY/MM/DD .
Si vous voyez une technique pour m'en sortir merci d'avance ..
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: boucle for récupération de variables

Message par flox »

Bonjour,
en batch on peut l'écrire comme ça:

Code : Tout sélectionner

echo %date:~6,10%%date:~2,3%/%date:~0,2%
Si tu veut plus d'infos sur le découpage de variables regarde ici

Bon courage
dutty76-

Re: boucle for récupération de variables

Message par dutty76- »

Merci flox pour ta réponse , j'ai essayer ton bout de code , ça n'a pas l'air de fonctionner ou alors je l'ai mal plaçé , sur le lien que tu m'a donné pour le découpage de variable cela semble correct mais dans le cas ou tu veux découper ta variable pour en afficher plusieurs composants or la ce que je souhaite faire c'est inverser complètement l'ordre des chiffres. Je t'envoie mon bout de code si tu vois ce qui ne vas pas merci d'avance :-)

Code : Tout sélectionner

for /f "tokens=7,8,9,10 DELIMS=; " %%i IN (12-2007.txt) do 
@echo INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('%%i','%%j','%%k','%%l%:~6,10%%l:~2,3%/%l:~0,2%');>>test.sql
pause
Ici en prenant en compte la modification que tu m'as donné .

Code : Tout sélectionner

for /f "tokens=7,8,9,10 DELIMS=; " %%i IN (12-2007.txt) do @echo INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('%%i','%%j','%%k','%%l');>>sql.sql
pause
Ici sans
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: boucle for récupération de variables

Message par flox »

Peut tu joindre un extrait de ton fichier "12-2007.txt", pour tests.


Merci
dutty768

Re: boucle for récupération de variables

Message par dutty768 »

re floxi !
je ne peux evidemment pas et tu me comprendras te joindre la totalité du fichier par soucis de confidentialité mais voila les deux premieres lignes ce de fichier .
Merci encore d'autant que je ne trouve pas la solution

05132003;00001;840794065;PPR;01212007;11112001;0504206;AUBRYE;JULIETTE;27011940;016,03;020,00;00320,60;
05132004;00001;54760794065;PPR;01022007;31112001;0229078;BALOTTIN;POLO;29111963;010,23;020,00;00204,60;
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: boucle for récupération de variables

Message par flox »

Re,

Voila une solution, qui fait un peu bricolage, mais ta moulinette semble fonctionner:

moulinette.bat

Code : Tout sélectionner

@echo off
setlocal EnableDelayedExpansion
set date=
for /f "tokens=7,8,9,10 DELIMS=; " %%i IN (12-2007.txt) do set date=%%l& echo  INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('%%i','%%j','%%k','!date:~4,4!!date:~2,2!!date:~0,2!'); >> sql.sql
pause
12-2007.txt

Code : Tout sélectionner

05132003;00001;840794065;PPR;01212007;11112001;0504206;AUBRYE;JULIETTE;27011940;016,03;020,00;00320,60;
05132004;00001;54760794065;PPR;01022007;31112001;0229078;BALOTTIN;POLO;29111963;010,23;020,00;00204,60;
résultat avant sql.sql:

Code : Tout sélectionner

INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('0504206','AUBRYE','JULIETTE','27011940]');
INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('0229078','BALOTTIN','POLO','29111963');
résultat après sql.sql:

Code : Tout sélectionner

 INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('0504206','AUBRYE','JULIETTE','19400127'); 
 INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('0229078','BALOTTIN','POLO','19631129');


Dis moi si sa fonctionne aussi chez toi
dutty76_

Re: boucle for récupération de variables

Message par dutty76_ »

Impressionant , c'est exactement ce que je souhaitais merci beaucoup beaucoup floxi ..
Par contre pour "pousser" un ptit peu est ce que je peux te demander de m'expliquer brievement comment ca marche ?
Merci infiniment
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: [Résolu] boucle for récupération de variables

Message par flox »

Re,

Code : Tout sélectionner

@echo off
setlocal EnableDelayedExpansion
set date=
for /f "tokens=7,8,9,10 DELIMS=; " %%i IN (12-2007.txt) do set date=%%l& echo  INSERT INTO t_beneficiaire (num_apa,nom_beneficiaire,prenom_beneficiaire,date_naissance) VALUES ('%%i','%%j','%%k','!date:~4,4!!date:~2,2!!date:~0,2!'); >> sql.sql
pause
Explications:
Dans le do de ton for, on récupère contenu de la variable date "%%l" pour la stocker dans une autre variable "date"(on est obliger car je connais pas de méthode pour découper une variable de type %%i), puis on exécute l'écho, en replaçant le "%%l" par le découpage de la variable date. On mélange tout ça, "!date:~4,4!" signifie que l'on prend 4 caractères à partir du 4eme, on concatène le mois et le jour (exemple: ici) et le tour est joué. L'utilisation des variables avec des "!" au lieu des "%" est du à l'activation de la variable local "EnableDelayedExpansion", passage obligatoire si l'on veut réaliser des opérations complexes dans une boucle for.

J'espère que j'ai été assez clair :)
Répondre