Supprimer un caractère dans un fichier texte avec .bat
Fermé
adeline_jolie
Messages postés
2
Date d'inscription
samedi 19 octobre 2013
Statut
Membre
Dernière intervention
26 octobre 2013
-
19 oct. 2013 à 18:00
Dev1 - 23 déc. 2015 à 06:09
Dev1 - 23 déc. 2015 à 06:09
A voir également:
- Supprimer un caractère dans un fichier texte avec .bat
- Fichier rar - Guide
- Fichier bat - Guide
- Caractère ascii - Guide
- Supprimer une page word - Guide
- Comment réduire la taille d'un fichier - Guide
4 réponses
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
25 oct. 2013 à 13:21
25 oct. 2013 à 13:21
Salut,
Voici un code qui devrait te permettre de corriger ton fichier...
C'est du code ISO ton fichier si je ne m'abuse, tu fais quoi ? du tournage, fraisage ou autre ? Simple curiosité ^^
@+
Bricomachin
Voici un code qui devrait te permettre de corriger ton fichier...
@echo off
if exist "progCorrige.txt" (
color 0c
echo Erreur: le fichier progCorrige.txt existe d'j... !
pause
exit
)
if not exist "prog.txt" (
color 0c
echo Erreur: le fichier prog.txt n'existe pas !
pause
exit
)
setlocal ENABLEDELAYEDEXPANSION
set ligne=""
REM découpe chaque ligne du fichier texte
for /f "delims=" %%a in ('type prog.txt') do (
set ligne=%%a
REM Cette ligne enlève le point en fin de ligne si il existe
if "!ligne:~-1!"=="." set ligne=!ligne:~0,-1!
rem découpe mot-à-mot
for /f "tokens=1*" %%b in ("!ligne!") do (
set noLigne=%%b
REM si le 1er mot commence par N, on ne le prend pas en compte
if "!noLigne:~0,1!"=="N" set ligne=%%c
)
echo !ligne!>>progCorrige.txt
if exist "progCorrige.txt" (
color 0A
echo Le fichier corrig' a bien 't' cr'' !
pause
exit
)
)
pause
endlocal
C'est du code ISO ton fichier si je ne m'abuse, tu fais quoi ? du tournage, fraisage ou autre ? Simple curiosité ^^
@+
Bricomachin
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
7 nov. 2013 à 00:02
7 nov. 2013 à 00:02
Salut,
Alors premièrement, je suis désolé de ne pas avoir vu ton message plus tôt.
J'ai testé le fichier à la maison et il me donne x50 et c'est tout. C'est bizarre car j'avais réussi à bien formater le fichier une fois...
Bon je vais remodifier le fichier et te le ré-envoyer.
Et si jamais setlocal ENABLEDELAYEDEXPANSION est une instruction très pratique pour résoudre les problèmes de SET dans des FOR et des IF par exemple.
En l'occurrence je l'utilise pour pouvoir faire un SET dans une boucle sans que ce ne soit toujours la première valeur qui soit retournée.
Un petit exemple pour te rendre compte:
Ok alors je me mets sur le truc demain au boulot je pense... mais je n'aurais peut-être l'occasion de le faire que vendredi.
De toute façon tu peux déjà potasser cette magnifique commande que setlocal ENABLEDELAYEDEXPANSION ^^
@++
Bricomachin
Alors premièrement, je suis désolé de ne pas avoir vu ton message plus tôt.
J'ai testé le fichier à la maison et il me donne x50 et c'est tout. C'est bizarre car j'avais réussi à bien formater le fichier une fois...
Bon je vais remodifier le fichier et te le ré-envoyer.
Et si jamais setlocal ENABLEDELAYEDEXPANSION est une instruction très pratique pour résoudre les problèmes de SET dans des FOR et des IF par exemple.
En l'occurrence je l'utilise pour pouvoir faire un SET dans une boucle sans que ce ne soit toujours la première valeur qui soit retournée.
Un petit exemple pour te rendre compte:
@echo off
echo le set dans le if ne fonctionne pas
set test=Fail
if 1==1 (
set test=Marche
echo test : %test%
pause
)
echo.
echo.
echo mais hors du if il fonctionne
set test2=Fail
if 1==1 (
set test2=Marche
)
echo test2 : %test2%
pause
setlocal ENABLEDELAYEDEXPANSION
echo.
echo.
echo le set dans le if fonctionne avec setlocal ENABLEDELAYEDEXPANSION
set test3=Fail
if 1==1 (
set test3=Marche
echo test3 : !test3!
pause
)
endlocal
Ok alors je me mets sur le truc demain au boulot je pense... mais je n'aurais peut-être l'occasion de le faire que vendredi.
De toute façon tu peux déjà potasser cette magnifique commande que setlocal ENABLEDELAYEDEXPANSION ^^
@++
Bricomachin
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
7 nov. 2013 à 00:04
7 nov. 2013 à 00:04
Voici un peu de doc : https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc772046(v=ws.10)?redirectedfrom=MSDN et il y a toujours set /? dans le cmd ^^
@++
@++
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
16 nov. 2013 à 18:57
16 nov. 2013 à 18:57
Salut,
Tout d'abord, si un programmeur Batch passe par là, ce serait cool s'il pouvait expliquer pourquoi dans le code posté ci-dessus la cause du problème est-il le
Bon ensuite, pour pouvoir écrire le code ISO dans le fichier progCorrige.txt. il faut appeler le "traitement ISO.bat" dans le cmd comme ceci :
Mais à ce moment, il crée progCorrige avant de lancer "traitement ISO.bat" et donc on reçoit l'erreur du fichier déjà existant dans le progCorrige.txt.
En conclusion:
Utiliser le programme :
et l'appeler "traitement ISO.bat"
puis le lancer grâce au programme suivant :
dont le nom est sans importance...
Je suis désolé d'avoir fait si long, mais c'était un problème auquel je ne m'étais jamais frotté et j'ai eu un mal de chien à le résoudre ^^.
Pourtant, je suis content d'être tombé sur ce post, déjà rien que pour enrichir mes connaissances.
En tout cas, je reste à ta disposition pour d'autres modifs/questions et te souhaite une bonne soirée.
Bricomachin
Tout d'abord, si un programmeur Batch passe par là, ce serait cool s'il pouvait expliquer pourquoi dans le code posté ci-dessus la cause du problème est-il le
echo !ligne!>>progCorrige.txt. En effet, après de looooongues heures à réécrire cent fois le programme et à désactiver une à une les commandes pour trouver laquelle ne jouait pas, j'ai compris que si l'on met
echo !ligne!cela fonctionne (il affiche x50 y25 g50) mais avec
echo !ligne!>>progCorrige.txtcela n'écrit dans le fichier que x50 !!!
Bon ensuite, pour pouvoir écrire le code ISO dans le fichier progCorrige.txt. il faut appeler le "traitement ISO.bat" dans le cmd comme ceci :
"traitement SO.bat"> progCorrige.txt 2>&1ou alors lancer un fichier batch qui va lancer "traitement ISO.bat" et qui contient ça :
@echo off
call "traitement ISO.bat" >progCorrige.txt 2>&1
exit
Mais à ce moment, il crée progCorrige avant de lancer "traitement ISO.bat" et donc on reçoit l'erreur du fichier déjà existant dans le progCorrige.txt.
En conclusion:
Utiliser le programme :
@echo off
if not exist "prog.txt" (
color 0c
echo Erreur: le fichier prog.txt n'existe pas !
pause
exit
)
setlocal ENABLEDELAYEDEXPANSION
set ligne=""
REM découpe chaque ligne du fichier texte
for /f "delims=" %%a in (prog.txt) do (
set ligne=%%a
REM Cette ligne enlève le point en fin de ligne s'il existe
if "!ligne:~-1!"=="." set ligne=!ligne:~0,-1!
rem découpe mot-à-mot
for /f "tokens=1* delims= " %%b in ("!ligne!") do (
set noLigne=%%b
REM si le 1er mot commence par N, on ne le prend pas en compte
if "!noLigne:~0,1!"=="N" set ligne=%%c
)
echo !ligne!
)
endlocal
et l'appeler "traitement ISO.bat"
puis le lancer grâce au programme suivant :
@echo off
call "traitement ISO.bat" >progCorrige.txt 2>&1
exit
dont le nom est sans importance...
Je suis désolé d'avoir fait si long, mais c'était un problème auquel je ne m'étais jamais frotté et j'ai eu un mal de chien à le résoudre ^^.
Pourtant, je suis content d'être tombé sur ce post, déjà rien que pour enrichir mes connaissances.
En tout cas, je reste à ta disposition pour d'autres modifs/questions et te souhaite une bonne soirée.
Bricomachin
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
16 nov. 2013 à 18:58
16 nov. 2013 à 18:58
Je suis en train de modifier le code pour enlever les g50 etc et ne conserver uniquement que les coordonnées...
bricomachin
Messages postés
244
Date d'inscription
lundi 4 janvier 2010
Statut
Membre
Dernière intervention
6 septembre 2016
133
16 nov. 2013 à 19:33
16 nov. 2013 à 19:33
Salut,
Voici deux versions deux code qui permet de ne garder que les coordonnées:
celui-là s'il les x et y peuvent être à des endroits variables de la ligne
exemple:
N10 x50 g50 puis sur la ligne d'après :
N15 g03 y80
et celui là si tu sais que ce sera toujours le premier argument
exemple:
N20 y80 g50
N25 x45 g03
voilà,
@++
Bricomachin
Voici deux versions deux code qui permet de ne garder que les coordonnées:
celui-là s'il les x et y peuvent être à des endroits variables de la ligne
exemple:
N10 x50 g50 puis sur la ligne d'après :
N15 g03 y80
@echo off
if not exist "C:\Users\Romain\Desktop\prog.txt" (
color 0c
echo Erreur: le fichier prog.txt n'existe pas !
pause
exit
)
setlocal ENABLEDELAYEDEXPANSION
set ligne=""
set ligneFinale=
REM découpe chaque ligne du fichier texte
for /f "delims=" %%a in (prog.txt) do (
set ligne=%%a
REM Cette ligne enlève le point en fin de ligne s'il existe
if "!ligne:~-1!"=="." set ligne=!ligne:~0,-1!
set ligneFinale=
rem découpe mot-à-mot (je ne pense pas qu'il puisse y avoir plus de 6 arguments sur une ligne...)
for /f "tokens=1-6 delims= " %%b in ("!ligne!") do (
set noLigne=%%b
rem echo !Ligne!
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%c
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%d
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%e
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%f
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%g
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
)
if not "!ligneFinale!"=="" echo !ligneFinale!
)
endlocal
exit
et celui là si tu sais que ce sera toujours le premier argument
exemple:
N20 y80 g50
N25 x45 g03
@echo off
if not exist "C:\Users\Romain\Desktop\prog.txt" (
color 0c
echo Erreur: le fichier prog.txt n'existe pas !
pause
exit
)
setlocal ENABLEDELAYEDEXPANSION
set ligne=""
set ligneFinale=
REM découpe chaque ligne du fichier texte
for /f "delims=" %%a in (prog.txt) do (
set ligne=%%a
REM Cette ligne enlève le point en fin de ligne s'il existe
if "!ligne:~-1!"=="." set ligne=!ligne:~0,-1!
set ligneFinale=
rem découpe mot-à-mot (je ne pense pas qu'il puisse y avoir plus de 6 arguments sur une ligne...)
for /f "tokens=1,2 delims= " %%b in ("!ligne!") do (
set noLigne=%%b
rem echo !Ligne!
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
set noLigne=%%c
REM si le mot ne commence par X ou Y, on ne le prend pas en compte
if /i "!noLigne:~0,1!"=="X" (
set ligneFinale=!noLigne!
) else (
if /i "!noLigne:~0,1!"=="Y" (
set ligneFinale=!noLigne!)
)
)
if not "!ligneFinale!"=="" echo !ligneFinale!
)
endlocal
exit
voilà,
@++
Bricomachin
25 oct. 2013 à 14:10
26 oct. 2013 à 01:02
Merci de m'avoir avancé un peu plus.... ça ne marche pas encore... mais on s'approche.... lol
le fichier final ne ressemble pas à :
x50
y25
Mais tu m'a donner une bonne base de travail....lol
j'ai pas compris setlocal ENABLEDELAYEDEXPANSION
Aurai tu un peu de temps pour complèter.... Merci d'avance
23 déc. 2015 à 06:09
j'ai un soucis qui ressemble à celui d 'Aadeline_jolie
J'ai un fichier dont les lignes ressemblent à ceci
"id"; "user"; ''login"; ....
Je voudrais savoir si c'est possible de supprimer tous les guillemets de chaque ligne.
Merci pour ton aide