Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2236 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Batch windows - Supprimer/modifier une ligne d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Batch windows - Supprimer/modifier une ligne d'un fichier

n°1339891
polo021
Posté le 05-04-2006 à 17:23:04  profilanswer
 

Salut,
 
Je fais un .bat qui lit tous les fichiers d'un dossier et qui réécrit le contenu de chaque fichier dans un nouveau fichier.
Le fait est que je ne veux pas garder les lignes qui commencent par le mot CONNECTION.
 
mon code :  

Code :
  1. IF NOT %ligne:~1,10%==CONNECTION goto EcrireLigne


 
Ca fonctionne mais si une ligne du fichier a une longueur inférieure à 10 caractères le programme plante car il ne peut pas faire la comparaison. "The syntax of the command is incorrect"
Comment pourrais-je éviter ce plantage? Je ne trouve pas de commande pour compter le nombre de caractères d'une ligne.
 
MErci de votre aide

Message cité 1 fois
Message édité par polo021 le 05-04-2006 à 19:57:33
mood
Publicité
Posté le 05-04-2006 à 17:23:04  profilanswer
 

n°1339896
olivthill
Posté le 05-04-2006 à 17:31:52  profilanswer
 

Juste pour infos,
il existe une solution en utilisant FIND /V "CONNECTION" fichier_in.txt >fichier_out.txt
ou avec grep -v si on a grep.

n°1339978
polo021
Posté le 05-04-2006 à 19:40:58  profilanswer
 

olivthill a écrit :

Juste pour infos,
il existe une solution en utilisant FIND /V "CONNECTION" fichier_in.txt >fichier_out.txt
ou avec grep -v si on a grep.


 
Je ne pensais pas qu'il y aurait une solution aussi simple. Je pense qu'elle me convient parfaitement.  
Merci beaucoup
 
Par contre j'ai une autre question. Comment puis-je faire maintenant pour modifier une ligne.
J'ai la ligne suivante dans mes fichiers : DB2=BASE.DATABASE (par exemple)  
et je voudrais supprimer le nom de la base et le "."
Est-ce que je peux y arriver sans mettre en oeuvre la solution que j'ai cité dans mon premier poste?  
Cad lire chaque ligne et si elle commence par DB2 ne garder que DB2=DATABASE . Au quel cas je retombe dans mon problème de plantage :-/


Message édité par polo021 le 05-04-2006 à 20:01:42
n°1340037
wackevat
Posté le 05-04-2006 à 20:48:20  profilanswer
 

polo021 a écrit :

mon code :  

Code :
  1. IF NOT %ligne:~1,10%==CONNECTION goto EcrireLigne


 
Ca fonctionne mais si une ligne du fichier a une longueur inférieure à 10 caractères le programme plante car il ne peut pas faire la comparaison. "The syntax of the command is incorrect"


Code :
  1. IF NOT "%ligne:~1,10%"=="CONNECTION" goto EcrireLigne


n°1340225
polo021
Posté le 06-04-2006 à 07:54:12  profilanswer
 

Effectivement, apres avoir testé la solution proposée par OlivThill, je peux voir que ca fonctionne bien si ce n'est qu'en début de fichier je trouve les 2 lignes suivantes :
 


 
---------- nom de mon fchier en entrée


 
 
et je ne veux pas ca au début de mon fichier [:sinclaire].
 
 
 
 
 
Merci à nglechau pour la syntaxe de mon IF. Ca corrige un problème mais j'ai toujours un plantage si la ligne que je teste est < que 10 caractères de long.
 
 
 
Merci

Message cité 1 fois
Message édité par polo021 le 06-04-2006 à 07:55:10
n°1340237
wackevat
Posté le 06-04-2006 à 08:44:07  profilanswer
 

polo021 a écrit :

Merci à nglechau pour la syntaxe de mon IF. Ca corrige un problème mais j'ai toujours un plantage si la ligne que je teste est < que 10 caractères de long.


Impossible que ça plante à cause de la longueur de la ligne :

Code :
  1. Z:\>set LIGNE=Hello
  2. Z:\>if NOT "%LIGNE:~1,10%" == "CONNECTION" echo Hello
  3. Hello


ou encore :

Code :
  1. Z:\>set LIGNE=H
  2. Z:\>if "%LIGNE:~3,10%" == "CONNECTION" (echo Hello) else (echo Hi)
  3. Hi


 
Dans les deux exemples, les sous-chaînes extraites sont simplement vides.
 
A moins que tu aies les caractères spéciaux dans ton texte, et ça se trouve qu'ils sont dans une ligne courte. Là, effectivement, ça peut planter.

n°1340248
polo021
Posté le 06-04-2006 à 09:26:59  profilanswer
 

wackevat a écrit :

Impossible que ça plante à cause de la longueur de la ligne :

Code :
  1. Z:\>set LIGNE=Hello
  2. Z:\>if NOT "%LIGNE:~1,10%" == "CONNECTION" echo Hello
  3. Hello


ou encore :

Code :
  1. Z:\>set LIGNE=H
  2. Z:\>if "%LIGNE:~3,10%" == "CONNECTION" (echo Hello) else (echo Hi)
  3. Hi


 
Dans les deux exemples, les sous-chaînes extraites sont simplement vides.
 
A moins que tu aies les caractères spéciaux dans ton texte, et ça se trouve qu'ils sont dans une ligne courte. Là, effectivement, ça peut planter.


 
oui j'ai un caractère spécial dans la ligne car ma ligne vaut :

" "

et là le test plante

Code :
  1. if NOT "%LIGNE:~1,10%" == "CONNECTION"


J'ai des " en début et fin de ligne car la ligne est lue dans un fichier :-(
 
Je pourrais faire un test spécial pour ce cas là mais c'est pas top comme programmation.

Code :
  1. if "%LIGNE:~1,1%" == " " goto PasserLigne


 
Est-ce que je pourrais éviter d'avoir des " quand je lis mes lignes dans le fichier en entrée? Ou une autre solution
 
EDIT : j'ai trouvé
set ligne = %~1
le ~ dans cette commande enlève les quotes qui entourent ma ligne.
le problème est que maintenant la commande
@ECHO %ligne% >> monfichierdesortie
inscrit ECHO IS ON dans le fichier si je traite une ligne qui contient un espace. Je crois donc que je vais utiliser un IF pour ne pas traiter ces ligne qui m'embettent.


Message édité par polo021 le 06-04-2006 à 09:48:32
n°1340532
wackevat
Posté le 06-04-2006 à 13:32:05  profilanswer
 

Si tu as systématiquement des quotes autour de chaque ligne, et uniquement autour, oui, %~1 t'en débarrasse.
 
Si tu as des lignes sans quotes, et celles-ci contiennent des blancs, %1 ne prendra en compte que la première partie avant le premier espace/tab.
 
Pareil si tu as un troisième guillemet au milieu de la ligne.
 
Pour ton ECHO IS ON, il suffit de faire un  
if not "%ligne%" == "" echo %ligne%>>sortie.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Batch windows - Supprimer/modifier une ligne d'un fichier

 

Sujets relatifs
Batch pour passer d'un Domaine à un WorkgroupExplorer de fichier dynamique / Listing de fichiers dynamique
PHP 4.3.10 chez Free : impossible de supprimer un répertoire vide !?[Perl] effacer début fichier texte
windows.onload et setTimeoutTaille de fichier texte
filet qui va pas au bout de la ligne sur FF et ses copinestester si un fichier est vide
Lecture dans un fichier texte avec separateur , ??Vider la corbeille avec un fichier *.vbs
Plus de sujets relatifs à : Batch windows - Supprimer/modifier une ligne d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR