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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [batch dos] rempacler une chaine de caractere dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[batch dos] rempacler une chaine de caractere dans un fichier

n°453269
sbucci2
Posté le 10-07-2003 à 09:28:01  profilanswer
 

bonjour, c 'est encore moi
 
je voudrais remplacer dans un fichier txt toutes les chaines ";;;" par ";" .
 
Je vois pas comment je pourrais faire.
 
merci

mood
Publicité
Posté le 10-07-2003 à 09:28:01  profilanswer
 

n°453296
sbucci2
Posté le 10-07-2003 à 10:06:10  profilanswer
 

up

n°453388
sbucci2
Posté le 10-07-2003 à 11:06:08  profilanswer
 

[:denetrob]

n°454203
Carbon_14
Posté le 10-07-2003 à 21:41:42  profilanswer
 

sbucci2 a écrit :


Je vois pas comment je pourrais faire.


Nous non plus. :cry:  
 [:yoyoz]

n°454633
JPA
Posté le 11-07-2003 à 09:08:15  profilanswer
 

j'ai des idées sur ce point, mais je n'ai pas encore finalisé.
Par contre ma solution (si j'y arrive) supprimera toutes les lignes vides du fichier texte...
 
C'est sur que la solution la plus simple serait de développer un petit programme en C...
 
A tout à l'heure

n°454775
JPA
Posté le 11-07-2003 à 10:45:59  profilanswer
 

j'y suis enfin arrivé :
il faut 2 fichiers batch :
on suppose que le fichier à modifier est toto.txt
 
le premier que j'ai appelé test1.bat :
del fichier2.txt
for /F "delims=" %%i in (toto.txt) do call rempl.bat "%%i"
type toto.txt
type fichier2.txt
del toto.txt
ren fichier2.txt toto.txt
echo c'est fini
 
le 2° s'appelle rempl.bat :
set toto=%1
rem on enlève le 1° et dernier caractère (les " )
set toto=%toto:~1,-1%
rem on remplace ;;; par ;
set toto=%toto:;;;=;%
echo %toto%>>fichier2.txt
 
 
à toi de remplacer dans le 1° fichier toto.txt par %1 si tu veux lancer le batch par test1 nom_de_fichier
évite elors les fichiers avec des espaces dans le nom...
 

n°455305
sbucci2
Posté le 11-07-2003 à 14:59:29  profilanswer
 

merci beaucoup  :jap:  
tu me sauves la vie
c est chiant les fichiers csv   :fou:  
 
je te montrerais mon bat à la fin si tu veux un truc de dingue :pt1cable:

n°489560
Cruchot
Posté le 17-08-2003 à 17:56:40  profilanswer
 

Sinon ya toutes les commandes unix pour windows qui existent, en particulier sed qui permettrait d'aller plus vite.
 
sed -e '1,$s/;;;/;/g' tonfichier > tonnouveaufichier

n°1420427
webding
Posté le 05-08-2006 à 14:51:12  profilanswer
 

sbucci2 a écrit :

merci beaucoup  :jap:  
tu me sauves la vie
c est chiant les fichiers csv   :fou:  
 
je te montrerais mon bat à la fin si tu veux un truc de dingue :pt1cable:


 
Je veut bien voir moi

n°1420438
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-08-2006 à 15:24:25  profilanswer
 

mais par pitié, arrétez d'utiliser le batch en 2006 [:psychokwak]
en python par exemple, ce truc prend une ligne


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 05-08-2006 à 15:24:25  profilanswer
 

n°1420439
webding
Posté le 05-08-2006 à 15:29:04  profilanswer
 

J'ai pas le temps d'apprendre le python  
 
Moi je reste au batch, c'est beaucoup plus facile à programmer, de plus je ne suis pas programmeur, je fait juste des script batch pour mon pc, python c'est plutôt pour les programmeurs.
 
Toi silteplait, arrête de répondre juste pour dire que le batch c'est mor, on est bien sur le forum Shell et batch ici non ?
 
Et puis on est peu être en 2006, mais le dos de windows xp fait partie des années 2000.
 
Ne le prend pas mal, c'est juste qu'il y à toujours quelqu'un poour renier le batch quand je pose une question sur un batch, et j'en est un peu marre de toujours répéter, c'est pas grave, mais bon si vous n'aimez pas le batch, alors ignioer les poste sur le batch, et vous serez comtent  :)  
 
Si ça t'intérrésse il y a des forum spécial Python.
 
Cepandant, merci quand même pour la précision  :)  :)

Message cité 1 fois
Message édité par webding le 05-08-2006 à 15:34:54
n°1420445
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-08-2006 à 16:03:09  profilanswer
 

webding a écrit :


Toi silteplait, arrête de répondre juste pour dire que le batch c'est mor, on est bien sur le forum Shell et batch ici non ?


ok lol
je maintiens ma position : en 2006, utiliser le batch est aussi d'actualité que de monter un PC avec Windows 95. il y a des tas de langages de script très sympas qui sont apparus ces dernières années, qui permettent bien plus de choses que le batch et qui sont bien plus agréables.
le batch est très bien pour automatiser des lancements de logiciels par exemple, mais dans le sujet de ce topic, il est complètement inadapté. il faut arréter de penser qu'on peut tout faire en batch, ce n'est pas vrai (à moins de remplir le disque dur de tout un tas de commandes externes, super [:vague nocturne])
 
quant à l'argument "Python c'est pour les programmeurs", je le réfute : nul besoin d'etre programmeur pour apprendre comment remplacer un caractère comme un autre ! ok, si tu veux utiliser python comme simple langage de programmation, alors il faut effectivement etre programmeur. mais dans le cas de ce topic, c'est inutile, et je le prouve
 

Code :
  1. Src = open("c:\\in.txt","r" ) # on ouvre le fichier texte source
  2. Dest = open("c:\\out.txt","w" ) # on créé un autre fichier qui contiendra les modifications
  3. i=Src.read() # on stocke le contenu du fichier source dans la variable i (chaine de caractères)
  4. o=i.replace(";;;",";" ) # on remplace ";;;" par ";", le tout stocké dans la variable o
  5. Dest.write(o) # on écrit o dans le fichier destination
  6. Src.close() # et on ferme les fichiers
  7. Dest.close()


 
Voila ! 7 lignes ! C'est quand même autre chose que l'immonde bricolage à base de batch posté ici par JPA (que je félicite d'ailleurs pour son courage), et certainement plus lisible.
 
Vous avez des outils performants et gratuits, utilisez les donc [:kiki]


Message édité par Harkonnen le 05-08-2006 à 16:04:55

---------------
J'ai un string dans l'array (Paris Hilton)
n°1420446
webding
Posté le 05-08-2006 à 16:05:49  profilanswer
 

Et il faut les compiler les scripts python ?

n°1420447
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-08-2006 à 16:06:52  profilanswer
 

non justement, c'est là tout l'intéret des langages de script (Python, VBS et autres) : ils ne se compilent pas ! ils sont interprétés. une fois que le script est écrit, tu le sauvegardes et tu le lances en cliquant sur son icone


---------------
J'ai un string dans l'array (Paris Hilton)
n°1420450
webding
Posté le 05-08-2006 à 16:14:26  profilanswer
 

Bon ok, je testerais ce code ce soir, merci beaucoup  :)  
 
Une derniére question: Faut-il que j'installe quelquechose sur windows pour que les scripts python puisse tourné ?


Message édité par webding le 05-08-2006 à 16:15:09
n°1420452
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-08-2006 à 16:20:37  profilanswer
 

oui, faut installer Python : http://www.python.org/
télécharger ici : http://www.python.org/download/releases/2.4.3/


Message édité par Harkonnen le 05-08-2006 à 16:21:27

---------------
J'ai un string dans l'array (Paris Hilton)
n°1420455
webding
Posté le 05-08-2006 à 16:23:39  profilanswer
 

OK, merci, je testerais ça se soir

n°1424626
payes
Posté le 11-08-2006 à 20:54:25  profilanswer
 

lol encore une fois si cette rubrique est nommée "shell/batch" c'est pas  
 
pour rien :)
 
laisse les gens qui ont envie de programmer en batch programmer en  
 
batch , meme si le python est 30 fois mieux , 30 fois plus beau et plus  
 
pratique ...  
 
perso je viens pas sur les topics python pour dire aux programmeurs  
 
python qu'ils feraient beaucoup mieux d'aller apprendre le C tout  
 
simplement parceque ce language est plus puissant ou meme  
 
plus simple.  
 
je te remercie du soucis que tu portes a vouloir nous faciliter la vie ,  
 
mais comprend que les gens comme moi ( et breaucoup d'autre  
 
d'ailleurs ) qui ne veulent seulement que programmer des ptites choses  
 
n'aient pas envie de reaprendre un language ... perso ca fait environ  
 
2 , 3 ans que je bidouille de tout les cotés , je vais chercher sur des  
 
forums et des sites des infos , que j 'apprend a mon rythm , bien sur  
 
que j'aimerai connaitre d'autre language pour faire des ptin d'interfaces  
 
et des programme pas lourd et avec beaucoup plus de possibilité , mais  
 
comprend que pour ce que je fait , quand j'ai un projet je vais mettre 1  
 
mois a le faire , et meme si j'avais mis seulement deux semaines en  
 
python , il me faudrai au moins 1 a 1.5 ans pour atteindre le niveau que  
 
j'ai en batch. comprend donc dès lors que je prefere faire mon pti  
 
programme en batch , plutot qu'en python , meme si le python est  
 
genialissime par rapport au batch.
 
c est comme si , pour quelqu'un qui sur windows 95 n'utilise que la  
 
calculette , tu lui disait qu'il vaut mieux qu'il passe sur xp car il  
 
pourra faire beaucoup plus de truc , qu'xp est plus puissant ,  
 
plus stable ou autre ... au final le resultat est le meme , il aura toujours  
 
sa calculette :)
 
mais si tu veut vraiment convaincre les personnes qui ont des projets  
 
en programmation un peu mieux que ce qu'offre le batch ( meme si pour
 
moi c est amplement suffisant ) , fais donc un topic dans cette  
 
section intilulé " a tout ceux qui veulent se lancer en batch , x raison  
 
pour vous convaincre que le python est mieux !"
 
mais evite stp de venir sur tout les topic batch et de dire que le batch  
 
c est de la merde , que c est inutile et qui a 30 fois mieux , on le sait  
 
mais pour des raisons x ou y , on, prefere programmer en batch ...
 
fait ton topics , place tes arguments et ceux qui seront convaincu
 
c'est cool pour eux , mais evite de "flooder" sur les topic de ceux qui  
 
n'ont aucune  envie de changer de language :)
 
merci d'avance ;)
 
bonne soirer a tous ;)
 

n°1443499
Yoshitu
Posté le 16-09-2006 à 23:17:40  profilanswer
 

Au fait, pas la peine de vous casse la tronche avec des codes de malades.
 
Pour remplacer ";;;" par ";", suffit de faire ça :
 
set chaine=%chaine:;;;=;%

n°1446159
profiler42
Posté le 22-09-2006 à 11:09:03  profilanswer
 

Yoshitu a écrit :

Au fait, pas la peine de vous casse la tronche avec des codes de malades.
 
Pour remplacer ";;;" par ";", suffit de faire ça :
 
set chaine=%chaine:;;;=;%


 
peux tu donner un exemple complet s'il te plait ?

n°1446720
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 24-09-2006 à 11:11:35  profilanswer
 

payes a écrit :


laisse les gens qui ont envie de programmer en batch programmer en  
 
batch , meme si le python est 30 fois mieux , 30 fois plus beau et plus  
 
pratique ...  


le problème est que tout le monde a l'air de penser que batch est un langage de programmation, et donc lui demandent des choses que seul un langage de programmation sait correctement faire. au départ, batch est un langage de script permettant de lancer des commandes DOS par lot, et destiné à faciliter la vie des utilisateurs de MS DOS en regroupant dans un seul fichier plusieurs commandes, destinées à accomplir une tache bien précise.
mais quand je vois des topics dans lesquels l'auteur demande de remplacer une chaine de caractères, ou bien de modifier des clés de registre, alors je peux pas m'empécher de bondir... (surtout pour la base de registres, qui n'existait meme pas quand batch est sorti)
 
il est parfaitement possible de visser une vis en tapant dessus comme un malade avec un marteau, c'est pas pour ça que :
1) la vis sera correctement vissée
2) le marteau est l'outil idéal pour visser une vis
 

payes a écrit :


bien sur  
 
que j'aimerai connaitre d'autre language pour faire des ptin d'interfaces  
 
et des programme pas lourd et avec beaucoup plus de possibilité , mais  
 
comprend que pour ce que je fait , quand j'ai un projet je vais mettre 1  
 
mois a le faire , et meme si j'avais mis seulement deux semaines en  
 
python , il me faudrai au moins 1 a 1.5 ans pour atteindre le niveau que  
 
j'ai en batch. comprend donc dès lors que je prefere faire mon pti  
 
programme en batch , plutot qu'en python , meme si le python est  
 
genialissime par rapport au batch.


c'est là que vous ne comprenez rien... il faut pas un an et demi pour apprendre le Python, c'est justement la force de ce langage. pour ce que vous voulez faire (remplacer des chaines de caractères, lire des clés de registre, toutes ces choses simples). une semaine à 15 jours suffisent largement, pour un bénéfice retiré 100 fois supérieur, et la garantie d'un gain de temps considérable par la suite (ben oui, à force de demander au batch des trucs qu'il ne sait pas faire, et de poser la question sur des forums, d'attendre la réponse, etc... on finit par ne pas remarquer qu'on perd un temps fou alors que Python a déja tout ce qu'il faut pour accomplir toutes les taches que vous lui demandez de façon très simple)
 

payes a écrit :


c est comme si , pour quelqu'un qui sur windows 95 n'utilise que la  
 
calculette , tu lui disait qu'il vaut mieux qu'il passe sur xp car il  
 
pourra faire beaucoup plus de truc , qu'xp est plus puissant ,  
 
plus stable ou autre ... au final le resultat est le meme , il aura toujours  
 
sa calculette :)


et si cette personne demande à la calc de Win95 de lui tracer une courbe, mais que seul celle d'XP sait faire ça ? tu vas lui dire de patcher sa calculatrice dans tous les sens pour un résultat incertain, ou lui conseiller de gagner du temps et de passer à XP ?
 

payes a écrit :


mais si tu veut vraiment convaincre les personnes qui ont des projets  
 
en programmation un peu mieux que ce qu'offre le batch ( meme si pour
 
moi c est amplement suffisant ) , fais donc un topic dans cette  
 
section intilulé " a tout ceux qui veulent se lancer en batch , x raison  
 
pour vous convaincre que le python est mieux !"


pas le temps, et je trouve bien plus constructif de donner l'équivalent python de ce que les gens demandent en batch dans les topics concernés. le batch est une techologie (?) dépassée, créee pour un certain OS, et qui n'a plus aucune raison d'être utilisée en 2006 sauf pour automatiser des lancements de petites taches.


Message édité par Harkonnen le 24-09-2006 à 11:12:07

---------------
J'ai un string dans l'array (Paris Hilton)
n°1447519
profiler42
Posté le 26-09-2006 à 12:20:17  profilanswer
 

Dans mon cas je dois modifier une chaine de caractères (adresse IP) dans des fichiers présents sur une cinquantaine de PC utilisateurs (2000 et XP + serveur en 2000)
Ces fichiers, ont un seul point commun : leur extension .ws (la quantité et la structure du nom sont différents d'un poste à l'autre)
 
Je ne souhaite pas installer de soft sur chaque PC.
 
Comme tu l'as dit à un moment, le batch est un langage de sript, et c'est pourquoi je suis parti sur un batch pour faire cette petite modif répétitive.
Je bute uniquement sur un problème lié aux espaces dans le nom d'une variable. (techno DOS arriérée, je sais ;) )
 
 
Maintenant, je suis ouvert à toute suggestion, du moment que c'est simple à mettre en oeuvre.
 
Comment procéderais-tu pour mon cas :
 
Toujours avec Python ? (est il utilisable pour modifier des fichiers sur des postes distants ?)
ou par script ? (de quel type, VBS ?)
 
 
Dernière précision, je devrais quand même passer sur les postes, donc pas de déploiement nécessaire par GPO
>>>  je veux juste éviter d'avoir à bosser avec le bloc-note
 
 
Merci d'avance à tous ceux qui feront avancer mon Schmilblick de manière concrète, que ce soit en batch où en python...  :jap:  
 
 
 
A toutes fins utiles, voici la ligne de commande qui coince en batch (si la variable %fichier% contient un espace) :
 
for /f "delims=" %%i in (%fichier%) do (set ligne=%%i&&call :traitement)
j'ai essayé les guillemets sans succès...

n°1447530
wackevat
Posté le 26-09-2006 à 12:29:44  profilanswer
 

Essaie l'option usebackq.

n°1447646
profiler42
Posté le 26-09-2006 à 15:10:05  profilanswer
 

wackevat a écrit :

Essaie l'option usebackq.


Ca marche !!!
Merci beaucoup  :jap:
 
 
Ma conclusion :
le bon vieux dos a encore des ressources  :love: , donc faut pas l'écarter systématiquement...
 
d'un autre côté j'ai regardé le serpent dans les yeux, et je suis tenté d'approndir le sujet
(j'ai chargé un tutoriel trouvé ici : http://python.50webs.com/)

n°1449104
wackevat
Posté le 28-09-2006 à 20:47:10  profilanswer
 

profiler42 a écrit :

Ma conclusion :
le bon vieux dos a encore des ressources  :love:


La conclusion est fausse ! :D
 
Ce n'est pas du tout du (batch du) bon vieux DOS.
 
C'est du batch Windows.
 
Le batch DOS ne supporte pas autant d'options.

n°1450772
profiler42
Posté le 02-10-2006 à 14:04:56  profilanswer
 

wackevat a écrit :

La conclusion est fausse ! :D
 
Ce n'est pas du tout du (batch du) bon vieux DOS.
 
C'est du batch Windows.
 
Le batch DOS ne supporte pas autant d'options.


OUPS !!! : C'est vrai que c'est un abus de langage assez répandu, merci de m'avoir corrigé.
 
Je crois que je me suis laissé aller à un brin de nostalgie :sweat:  (J'ai commencé avec dos 6.2)

n°1726047
edgard007
Posté le 29-04-2008 à 10:55:36  profilanswer
 

profiler42 a écrit :

Dans mon cas je dois modifier une chaine de caractères (adresse IP) dans des fichiers présents sur une cinquantaine de PC utilisateurs (2000 et XP + serveur en 2000)
Ces fichiers, ont un seul point commun : leur extension .ws (la quantité et la structure du nom sont différents d'un poste à l'autre)
 
Je ne souhaite pas installer de soft sur chaque PC.
 
Comme tu l'as dit à un moment, le batch est un langage de sript, et c'est pourquoi je suis parti sur un batch pour faire cette petite modif répétitive.
Je bute uniquement sur un problème lié aux espaces dans le nom d'une variable. (techno DOS arriérée, je sais ;) )
 
 
Maintenant, je suis ouvert à toute suggestion, du moment que c'est simple à mettre en oeuvre.
 
Comment procéderais-tu pour mon cas :
 
Toujours avec Python ? (est il utilisable pour modifier des fichiers sur des postes distants ?)
ou par script ? (de quel type, VBS ?)
 
 
Dernière précision, je devrais quand même passer sur les postes, donc pas de déploiement nécessaire par GPO
>>>  je veux juste éviter d'avoir à bosser avec le bloc-note
 
 
Merci d'avance à tous ceux qui feront avancer mon Schmilblick de manière concrète, que ce soit en batch où en python...  :jap:  
 
 
 
A toutes fins utiles, voici la ligne de commande qui coince en batch (si la variable %fichier% contient un espace) :
 
for /f "delims=" %%i in (%fichier%) do (set ligne=%%i&&call :traitement)
j'ai essayé les guillemets sans succès...


 
Essaye :
 
for /f  "tokens=1,2* delims=," %%i in (fichier.txt)  do set var=%%i
 
Ceci indique que les champs (tokens) sont séparés par une virgule (delims) et tes espaces seront pris dans le champs.
@+

n°2101872
leon8121
LYON
Posté le 16-09-2011 à 16:50:10  profilanswer
 

Le souci ce pose lorsque tu n'as pas le choix, que tu dois forcément utiliser BATCH et que tu ne peux pas installer PYTHON ou PERL, ou autre... c'est mon cas, c'est super chiant, mais j'taff sur des Win2000 et Win2003 et lancement des scripts avec Dollar Universe


---------------
Leon
n°2106075
stephHal
Posté le 12-10-2011 à 22:51:07  profilanswer
 

Le soucis ne se pose pas le batch est un langage de programmation, mais pas pour les fainéants. Il est supporté nativement par les postes Win32 et cross-version. Ne nécessite aucune installation d'environnement pour s'exécuter. Il est donc déployable tel que. C'est exactement l'équivalent du shell (bourne ksh etc sous unix).
 
Voici le script qui remplace dans chaque ligne du fichier présenté en argument 1 ;;; par ; et écrit dans le fichier en argument 2.
 
Harkonen est hors sujet et fait du troll.
 

Code :
  1. @for /f %%s in (%1) do call :Remove "%%s" %2
  2. @goto :end
  3. :Remove
  4. set s=%1
  5. set s=%s:~1,-1%
  6. set f=%2
  7. set s=%s:;;;=;%
  8. echo %s% >>%f%
  9. :goto :eof
  10. :end


Message édité par stephHal le 12-10-2011 à 22:53:41
n°2121141
EstebanZZ
Posté le 13-01-2012 à 10:59:23  profilanswer
 

@Stephal : ouais, enfin, supporté nativement pas Windows, t'as aussi le VBScript ou le JScript, qui permettent de faire des choses plus puissantes que le batch!! Le batch, ça reste quand même une sacré plaie...et pour faire des script KSH a coté, même si c'est "censé" être l'équivalent du schell, ça tellement plus limité et moins intuitif en possibilité....un simple sed sous unix permet de le faire en une ligne!!

mood
Publicité
Posté le   profilanswer
 


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

  [batch dos] rempacler une chaine de caractere dans un fichier

 

Sujets relatifs
[batch dos] il y a t il une equivalent de [resolu + solution][BATCH] Formatage de date
[batch dos] extraction de chaine dans un fichier [resolu + solution][batch dos] Supprimé les 3 premieres lignes d un fichier txt
[C] savoir si un fichier est déjà ouvert[SQL]chaine de carctères présente dans un colonne
[VB(A)] Accéder à un fichier quelconque à la position désirée... 
Plus de sujets relatifs à : [batch dos] rempacler une chaine de caractere dans un fichier


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