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

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

Marsh Posté le 05-04-2006 à 17:23:04    

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
Reply

Marsh Posté le 05-04-2006 à 17:23:04   

Reply

Marsh Posté le 05-04-2006 à 17:31:52    

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.

Reply

Marsh Posté le 05-04-2006 à 19:40:58    

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
Reply

Marsh Posté le 05-04-2006 à 20:48:20    

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


Reply

Marsh Posté le 06-04-2006 à 07:54:12    

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
Reply

Marsh Posté le 06-04-2006 à 08:44:07    

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.

Reply

Marsh Posté le 06-04-2006 à 09:26:59    

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
Reply

Marsh Posté le 06-04-2006 à 13:32:05    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed