Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
1966 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  remplacer une chaine de caractere dans un fichier en .bat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

remplacer une chaine de caractere dans un fichier en .bat

n°1209574
naouf8
celib
Posté le 28-09-2005 à 10:45:38  profilanswer
 

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:

mood
Publicité
Posté le 28-09-2005 à 10:45:38  profilanswer
 

n°1209594
betsamee
Asterisk Zeperyl
Posté le 28-09-2005 à 11:04:31  profilanswer
 

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

n°1209643
naouf8
celib
Posté le 28-09-2005 à 11:49:58  profilanswer
 

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

n°1209730
nglechau
Posté le 28-09-2005 à 12:46:50  profilanswer
 

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


n°1209988
naouf8
celib
Posté le 28-09-2005 à 16:11:53  profilanswer
 

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 ???

n°1210071
nglechau
Posté le 28-09-2005 à 17:13:29  profilanswer
 

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

n°1210490
naouf8
celib
Posté le 29-09-2005 à 09:44:15  profilanswer
 

1 seul fichier texte mais avec >+ de 2000 ligne

n°1210521
nglechau
Posté le 29-09-2005 à 10:04:52  profilanswer
 

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.

n°1210999
naouf8
celib
Posté le 29-09-2005 à 17:43:54  profilanswer
 

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

n°1211431
nglechau
Posté le 30-09-2005 à 10:50:42  profilanswer
 

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.

mood
Publicité
Posté le 30-09-2005 à 10:50:42  profilanswer
 

n°1211545
naouf8
celib
Posté le 30-09-2005 à 12:21:26  profilanswer
 

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 ????

n°1211661
naouf8
celib
Posté le 30-09-2005 à 14:09:26  profilanswer
 

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"
 

n°1211853
nglechau
Posté le 30-09-2005 à 16:21:13  profilanswer
 

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.

n°1211916
naouf8
celib
Posté le 30-09-2005 à 17:01:45  profilanswer
 

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 ??

n°1212036
nglechau
Posté le 30-09-2005 à 18:26:12  profilanswer
 

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.

n°1212396
nglechau
Posté le 01-10-2005 à 13:12:08  profilanswer
 

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 >

n°1212410
pascale73
Posté le 01-10-2005 à 14:03:16  profilanswer
 

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.
 

n°1212415
nglechau
Posté le 01-10-2005 à 14:13:45  profilanswer
 

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 nglechau le 01-10-2005 à 14:38:00
n°1214456
naouf8
celib
Posté le 04-10-2005 à 14:46:29  profilanswer
 

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

n°1214472
naouf8
celib
Posté le 04-10-2005 à 14:50:08  profilanswer
 

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"

n°1214479
nglechau
Posté le 04-10-2005 à 14:51:51  profilanswer
 

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 ;)

n°1217737
meduze2000
Probleme=>Solution
Posté le 07-10-2005 à 15:16:50  profilanswer
 

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

n°1218008
nglechau
Posté le 07-10-2005 à 19:27:36  profilanswer
 

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:-> = %

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  remplacer une chaine de caractere dans un fichier en .bat

 

Sujets relatifs
[résolu] pb longueur de chaîne avec dbi:PgPPmise en forme d'un fichier xls à partir de vb dans acces
ouvrir un fichier protégé via Http avec une fonction PHPPlusieurs pieds de page dans un seul fichier html
Obtenir la date d'un fichier sans la bibliothèque usuelleFichier joint, par mail()
probleme d ecriture dans un fichier[VBS]Problème de taille d'un fichier non mis à jour...[EDIT]
remplacer une chaine de caractère dans un fichierProgramme pour remplacer une chaine de caractere dans un fichier
Plus de sujets relatifs à : remplacer une chaine de caractere dans un fichier en .bat



Copyright © 1997-2014 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC