FORUM Tom's Hardware » Programmation » Autre » [Batch] Problème espace ligne d'un fichier
 

[Batch] Problème espace ligne d'un fichier

Il y a 145 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [Batch] Problème espace ligne d'un fichier
 
Plus d'informations

Salut,
 
J'ai un fichier "repertoire1.txt" qui contient sur la 1ère ligne le nom d'un répertoire. Je fais un traitement qui sera détaillé dans la suite de mon explication, le fichier de sortie est "rep1.txt". Ce fichier est le suivant :
 
"               klbackup 2006-06-09 # 16-19-01"
 
Le problème comme vous le voyez c'est qu'il y a un espace sur la 1ère ligne avant le l'information voulue. Je veux absolument récupérer cette info mais sans l'espace avant.
 
j'utilise cette synthaxe suivante : "findstr [kl-$] repertoire1.txt > rep1.txt"
 
En croyant que sa fera l'extraction de la 1ère ligne du fichier en commencant par la chaîne de caractères qui commence par "kl" de "klbackup" jusqu'à la fin de la chaîne ($). Mais malheureusement l'espace reste au final avec la chaîne.
 
Merci de m'aider

zeb
Profil : Modérateur libre
Plus d'informations

Sous UNIX (ou sous Windows avec les bons outils) :


head -1 repertoire1.txt | sed "s/\([ ]*\)\(.*\)/\2/" > rep1.txt


 
Pour avoir les bons outils sous Windows, voir UnxUtils ;)

Plus d'informations

tu n'aurais pas une commnde en batch, je préférerais ??
 
si tu en a pas, ce n'est pas grave.
 
Merci

zeb
Profil : Modérateur libre
Plus d'informations

Ben qu'appelles-tu une commande en batch ?
 
S'il s'agit d'une des pauvres commandes en ligne de Windows, je n'ai rien à te proposer.
 
Si tu peux disposer de HEAD.EXE et de SED.EXE, disponibles dans UnxUtils (par exemple en les copiant dans un dossier présent dans la variable PATH, ou en ajoutant à la variable PATH le dossier où tu les auras copiés) tu recopies simplement la ligne ci-dessus proposée dans un fichier .BAT.

Plus d'informations

Merci pour ta réponse. ca marche nickel

Plus d'informations

tu ne sais pas par hasard ajouter des guillemets dans une ligne d'un fichier. Dans mon fichier j'ai ca :
 
"klbackup 2006-06-09 # 16-19-01"
 
et je voudrais que ca fasse "klbackup" "2006-06-09" "#" "16-19-01"
 
quels commande utilisé afin de réaliser ca ??  

zeb
Profil : Modérateur libre
Plus d'informations

SED !

zeb
Profil : Modérateur libre
Plus d'informations

Code :
  1. head -1 rep1.txt |
  2. sed "s/\(\"klbackup\)\( \)\([0-9-]*\)\( \)\(#\)\( \)\([0-9-]*\"\)/\1\" \"\3\" \"\5\" \"\7/"

Plus d'informations

en fait ton script permet juste d'ajouterles guillemets dans le fichier repertoire1 ??
 
en fait cela ne martche pas, le fichier contient toujours ca :
 
"klbackup 2006-06-09 # 16-19-01"

zeb
Profil : Modérateur libre
Plus d'informations

Meuh non, le contenu du fichier n'est pas altéré.
Pour ça, il faudrait faire une redirection :

type rep1.txt | sed "s/...../...../" > rep1_guillemets.txt


 
(en voyant ton premier post, j'ai pensé que tu savais)

pourquoi faire cent fois la même chose ?
Plus d'informations

a écrit :

tu ne sais pas par hasard ajouter des guillemets dans une ligne d'un fichier. Dans mon fichier j'ai ca :
 
"klbackup 2006-06-09 # 16-19-01"
 
et je voudrais que ca fasse "klbackup" "2006-06-09" "#" "16-19-01"
 
quels commande utilisé afin de réaliser ca ??

ah moi ce que j'aurai fait ...

Code :
  1. @echo off
  2. set TEMPORAIRE=%TMP%\$up3273mp.bat
  3. set AMORCE=E:\Unrep\amorce.txt
  4. set RET=
  5. if exist %TEMPORAIRE% rm %TEMPORAIRE%
  6. if "%1"=="CeCiEstUneChAinESpECIaLeUh" goto getinfo
  7. ::début de ton fichier batch original ...
  8. :: ici on traite.
  9. copy %AMORCE%+rep1.txt %TEMPORAIRE%
  10. :: si tu a quand même les unixutils, alors tu peut remplacer la ligne précédante par
  11. :: echo -n "%1 CeCiEstUneChAinESpECIaLeUh " | copy con+rep1.txt %TEMPORAIRE%
  12. :: l'avantage c'est qu'il y a pas besoin d'amorce. on peut alors virer la ligne set AMORCE= au dessus
  13. %TEMPORAIRE% @%0
  14. :getinfo
  15. :: ici on a la premiere ligne en argument, on peut donc la parser comme
  16. :: une ligne normale (attention car il faut quand même éliminer le premier terme)
  17. shift
  18. if "%1"=="" goto endget
  19. if not "%RET%"=="" set RET=%RET% "%1"
  20. if "%RET%"=="" set RET="%1"
  21. goto getinfo
  22. :endget
  23. ::suite du code, si on écrit :
  24. echo %RET%
  25. :: alors on affichera la premiere ligne du fichier avec des guillemets


ce qui se passe :
supposont que ton fichier contienne

        klbackup 2006-06-09 # 16-19-01
Generated by some program that put randoms lines here ...


le copy va creer un fichier batch du genre : (en supposant que le script principal s'appelle ''script.bat'')

@script.bat CeCiEstUneChAinESpECIaLeUh          klbackup 2006-06-09 # 16-19-01
Generated by some program that put randoms lines here ...


puis va l'executer, mais sans redonner la main à notre programme de départ
ce script formé de toute piece va lui simplement executer notre fichier de départ, mais avec un premier argument significatif et le reste de l'argument composé de la premiere ligne.
pour ne pas executer les lignes du dessous, on ne redonne pas la main après avoir rééxecuté notre script.
mais l'interpreteur il va nous aider : il va prendre la ligne et va nous prendre mot par mot les arguments que l'on pourrai traiter avec aise
 
TEMPORAIRE est une variable fixe qui doit contenir le chemin vers un fichier accesible en lecture/ecriture/execution
si on utilise une amorce, alors il faut que celle ci soit placé dans un repertoire accecible au moment ou on veut traiter la premiere ligne, et elle doit contenir :

@C:\chemin\vers\le\script\principal\script.bat CeCiEstUneChAinESpECIaLeUh

et surtout sans retour à la ligne dans le fichier
 
 
c'est moins propre mais ça reste dans l'esprit du batch.

zeb
Profil : Modérateur libre
Plus d'informations

Cool, jejetech à une solution full-anti-unix.  :ange:  
 
C'est beau unix :

for i in `head -1 rep1.txt | tr -d "\""` ; do echo -n "\"$i\"" ; done > rep2.txt


 
Et encore, sans utiliser awk !  :pt1cable:  


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » Autre » [Batch] Problème espace ligne d'un fichier
 

Annonces Google
Publicité