remplacer une chaine de caractere dans un fichier en .bat

remplacer une chaine de caractere dans un fichier en .bat - Shell/Batch - Programmation

Marsh Posté le 28-09-2005 à 10:45:38    

voila je veux remplacer une chaine de caractere dans un fichier txt sous shell DOS
 
exemple de fichier txt
source1 -> destination1  
source 2 -> destination2
source3 -> destination 3
source 4 -> destination 4

 
donc je veux remplacer la chaine " -> " par un simple espace " "
 
j'ai essayé cette commende mais ca marche pas : :??:  
findstr " -> " | replace " " >> res.txt
 
qq un a une idée ou une methode ?? mercii   :jap:

Reply

Marsh Posté le 28-09-2005 à 10:45:38   

Reply

Marsh Posté le 28-09-2005 à 11:04:31    

c'est pas gagne en shell dos comme une petite recherche sur le forum te l'aurais indique
http://forum.hardware.fr/hardwaref [...] 2393-1.htm

Reply

Marsh Posté le 28-09-2005 à 11:49:58    

y a cette commande qui permet de separer la ligne en 2partie mai le delime separe la ligne quand il trouve soit - soit > ou l espace.
ya un moyen pour force le delime de prendre toute la chaine " -> " ??
 
for /f "tokens=1,2* delims= -> " %%a in (c:fichier.txt) do (echo %%a %%b >>c:\log.txt
la commande est san resultat

Reply

Marsh Posté le 28-09-2005 à 12:46:50    

naouf8 a écrit :

for /f "tokens=1,2* delims= -> " %%a in (c:fichier.txt) do (echo %%a %%b >>c:\log.txt
la commande est san resultat


Tu as un espace de trop après delims= et avant ->

Code :
  1. @echo off
  2. setlocal enableExtensions
  3. for /f "tokens=1* delims=-> " %%a in (test.txt) do (echo %%a %%b)
  4. endlocal


Reply

Marsh Posté le 28-09-2005 à 16:11:53    

rappel mon fichier test.txt :
source1 -> destination2  
 
le cas dessus je recupere la ligne devisé en 2 le %%a et %%b mai si la source"un nom de fichier" contien le symbole '-' , je recupere que une partie de nom de fichier !!!! par ce qu le delime seppare caracter par caractere  
donc je cherche commen je separ la ligne par une chaine de caractere ???

Reply

Marsh Posté le 28-09-2005 à 17:13:29    

Tu as combien de fichiers à traiter ? C'est une tâche occasionnelle ou régulière ?

Reply

Marsh Posté le 29-09-2005 à 09:44:15    

1 seul fichier texte mais avec >+ de 2000 ligne

Reply

Marsh Posté le 29-09-2005 à 10:04:52    

Eh bien, Bloc-notes ;)
 
Tu n'avais pas compris le sens du param delimS = délimiteurS = liste des délimiteurS != une chaîne qui joue le rôle de délimiteur.

Reply

Marsh Posté le 29-09-2005 à 17:43:54    

ok donc y a pa un moyen pr faire une chaine délimiteur !!!

Reply

Marsh Posté le 30-09-2005 à 10:50:42    

naouf8 a écrit :

ok donc y a pa un moyen pr faire une chaine délimiteur !!!


Si !
Si comme tu dis, ce sont le nom des dossiers/fichiers, dont le caractère > n'est pas autorisé. Tu peux donc l'utiliser comme délimiteur, puis après découpage, tu enlèves les caractères de trop à la fin de la première valeur et au début de la deuxième. Reste plus qu'à reconstruire la ligne.

Reply

Marsh Posté le 30-09-2005 à 10:50:42   

Reply

Marsh Posté le 30-09-2005 à 12:21:26    

ok nglechau,
la qustion est comment je fait pr enlevé les 2 dernier caractere pour le 1er variable et enlevé le 1er caractere du 2eme variable ????

Reply

Marsh Posté le 30-09-2005 à 14:09:26    

Merci "pascale73" pour le code mais malhereusement ca marche pas.
par ce que  si la source contient des espace "la source-1 -> desti 2",  la 1er variable contien que "la"
 

Reply

Marsh Posté le 30-09-2005 à 16:21:13    

naouf8 a écrit :

ok nglechau,
la qustion est comment je fait pr enlevé les 2 dernier caractere pour le 1er variable et enlevé le 1er caractere du 2eme variable ????


Regarde dans l'aide de la commande  
set
Tu y trouves plein d'exemples.

Reply

Marsh Posté le 30-09-2005 à 17:01:45    

j ai cherché mais j ai pas trouvé des option qui permet d enlvé un nombre x caracteres a la fin ou au debut d une variable , est ce que tu connai la commande par coeur ??

Reply

Marsh Posté le 30-09-2005 à 18:26:12    

naouf8 a écrit :

j ai cherché mais j ai pas trouvé des option qui permet d enlvé un nombre x caracteres a la fin ou au debut d une variable , est ce que tu connai la commande par coeur ??


Bien sûr que je la connais.
 
Tu es sûr d'avoir tout lu ?
set /?
 
Si VAR=abcdef
alors %VAR:~2,3% sera cde
Il suffit donc de faire  
set VAR=%VAR:~2,3%
 
Je te laisse le soin de décortiquer le reste de l'aide. Absolument tout y est.

Reply

Marsh Posté le 01-10-2005 à 13:12:08    

pascale73 a écrit :


for /f "tokens=1-4 delims=> " %%a in ('type test.txt') do (echo %%a %%b %%d>>log.txt)
 
mais attention ils doivent tous avoir la même longueur pour que ça marche !


Il y a plusieurs raisons :
- comme tu dis, il faut connaitre le nombre de "tokens" (avant et après le séparateur) à l'avance
- et s'il y a deux ou plus d'espaces consécutifs dans les noms de fichier ?
- tu n'élimines pas le - juste avant >

Reply

Marsh Posté le 01-10-2005 à 14:03:16    

les espaces sont gérables mais un caractère réservé en plus...
 
franchement neglchau, je renonce à trouver une solution en DOS, à la place de naouf8 je passerais par notepad ou utiliserais un programme externe type switch.exe.
 

Reply

Marsh Posté le 01-10-2005 à 14:13:45    

Je suis d'accord avec toi. C'est d'ailleurs ce que je lui ai conseillé plus haut, vu qu'il n'a qu'un seul fichier à traiter ;)
 
Sinon, ça devrait se faire comme j'ai proposé dans mon post le 30-09-2005 à 10:50.


Message édité par wackevat le 01-10-2005 à 14:38:00
Reply

Marsh Posté le 04-10-2005 à 14:46:29    

je vous merci les gas pr l aide, voila j ai trouvé le script qui me convien je le publié en cas ou!!!  
 
for /f "tokens=1,2* delims=>" %%b in (c:\test.txt) do (
  set var1=%%b
  set var2=%%c
  rem echo %var2% >> c:\log.txt
  call :commande
  )
goto end
:commande
set ligne1=%var1%
set ligne2=%var2%
echo "%ligne1:~0,-2%" "%ligne2:~1%" >> c:\coucou.txt
 
:end
endlocal&&goto :eof
 
donc avec un fichier test.txt qui contien:
source-1 -> destina-tion1  
sou-rce 2 -> destination_2
source3 -> destinatio-n 3
source 4 -> destin ation 4  
 
j oubtien le fichier log:
"source1" "destination1"  
"source 2" "destination2"
"source3" "destination 3"
"source 4" "destination 4"
 
si vous avez des idée pr amelioré le scripte n hésité pas merci

Reply

Marsh Posté le 04-10-2005 à 14:50:08    

deslé j ai trmpé de fichier log c le :
"source-1" "destina-tion1"  
"sou-rce 2" "destination_2"
"source3" "destinatio-n 3"
"source 4" "destin ation 4"

Reply

Marsh Posté le 04-10-2005 à 14:51:51    

C'est bon, c'est exactement ce qu'il fallait ! [:xp1700]
 
Juste deux (très) petites remarques :
- n'oublie pas le
setlocal
au début du script
 
- pas besoin de créer deux nouvelles variables, tu peux faire directement :
echo "%var1:~0,-2%" "%var2:~1%" >> c:\coucou.txt
 
Voulou ;)

Reply

Marsh Posté le 07-10-2005 à 15:16:50    

il faut tout simplement utiliser la commande SET avec le :      
SET VAR2=%VAR1:->= %

Reply

Marsh Posté le 07-10-2005 à 19:27:36    

meduze2000 a écrit :

il faut tout simplement utiliser la commande SET avec le :      
SET VAR2=%VAR1:->= %


[:xp1700]
 
Juste un espace de plus à éliminer :
SET VAR2=%VAR1:-> = %

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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