Page 1 sur 1

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

Posté : 29 févr. 2008 11:38
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

Re: boucle for récupération de variables

Posté : 29 févr. 2008 11:46
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 ..

Re: boucle for récupération de variables

Posté : 29 févr. 2008 16:14
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

Re: boucle for récupération de variables

Posté : 03 mars 2008 10:55
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

Re: boucle for récupération de variables

Posté : 03 mars 2008 21:11
par flox
Peut tu joindre un extrait de ton fichier "12-2007.txt", pour tests.


Merci

Re: boucle for récupération de variables

Posté : 04 mars 2008 11:14
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;

Re: boucle for récupération de variables

Posté : 04 mars 2008 22:45
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

Re: boucle for récupération de variables

Posté : 05 mars 2008 15:38
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

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

Posté : 05 mars 2008 19:58
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 :)