Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
FOR sur une liste qui a des champs vides
Auteur Message
Répondre en citant
Message FOR sur une liste qui a des champs vides 
Bonjour,

Je suis en train d'écrire un bat pour filtrer des données d'une base de donnée exportée en csv selon la valeur du 3eme champ (si le 3eme champ a cette valeur, je recopie la ligne dans un autre fichier, sinon je passe à la ligne suivante). Le problème étant que certains de ces champs sont vides.

Globalement, j'ai a disposition des fichiers du type

val1;val2;val3;val4
val5;val6;;val7
val8;;val9;val10

J'utilise une boucle for du genre :

Code:

for /f "tokens=1-4 delims=;" %%a in fichier) do (
   if %%c==%valeur que je veux% (
      echo %%a;%%b;%%c;%%d>>%autre_fichier%
   )
)Mon problème est que quand il y a deux delims cote à cote (champ vide), il ne considère pas un token vide entre les deux. Donc pour la seconde ligne de mon fichier, le script considère ca :
%%a = val5
%%b = val6
%%c = val7
%%d = "" (il ne considère pas de 4eme champ)
alors que je voudrais ca :
%%a = val5
%%b = val6
%%c = "" (chaine vide)
%%d = val7


J'ai eu beau chercher sur google, puis sur batch.xoo.it, je ne trouve pas la moindre piste de solution alors que j'ai trouvé quelques posts sur le même problème.
Bref si vous avez des suggestions, elles sont bienvenue, et merci d'avance pour votre aide !



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message FOR sur une liste qui a des champs vides 
Finalement je m'en suis sorti par une méthode détournée qui remplace les ;; par ;#;. Pour information si quelqu'un tombe sur ce message, voila comment j'ai fait :

Code:

for /f "delims=" %%1 in (fichier) do (
   set ligne_mem=%%1
   set ligne=!ligne_mem:;;=;#;!
   call traitement_ligne.bat

   for /f "tokens=1-4 delims=;" %%a in ("!ligne!") do (
      if %%l==%team% (
         set ligne_mod=%%a;%%b;%%c;%%d
         set ligne_mod=!ligne_mod:#=!
         echo ligne_mod>>%autre_fichier%
      )
   )
)


où traitement_ligne.bat est :

Code:

if not !ligne! EQU !ligne_mem! ( set ligne_mem=!ligne!
   set ligne=!ligne:;;=;#;!
   call traitement_ligne.bat )


Au départ, j'avais mis le code de traitement_ligne dans un label qui s'appellait au lieu d'un fichier bat à part qui s'appelle, mais j'avais des erreurs que je n'arrivait pas à résoudre, et c'est toujours un mystère (seulement les deux premieres lignes du fichier étaient lues...)



Message FOR sur une liste qui a des champs vides 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch