Rajout auto de caractères en fin de ligne d'un txt - Shell/Batch - Programmation
Marsh Posté le 21-11-2008 à 15:10:11
remplace '\r\n' par ';\r\n' avec un éditeur de texte du style notepad++
edit : testé
Marsh Posté le 21-11-2008 à 16:12:29
jagstang a écrit : remplace '\r\n' par ';\r\n' avec un éditeur de texte du style notepad++ |
Remplace quoi de où en fait ?
sinon j'ai fais ça :
echo
for /f "tokens=1,* delims=:" %%i in ('findstr /n /r . absence.txt') do echo %%j> %%i.txt
Copy "C:\nouveaudossier\absence.txt" "C:\nouveaudossier\copieabsenceoriginal.csv"
del "C:\nouveaudossier\absence.txt"
echo ;;;;;; >> *.txt
for /r "C:\nouveaudossier\" %%i in (*.txt) do for /f "delims=" %%j in ('type "%%i"') do echo %%j>> absence.csv
globalement c'est ça que je veux faire, juste qu'au niveau de la ligne en gras, ça ne passe pas
( et, oui j'avoue, c'est totalement moche et anti-performant comme code )
Marsh Posté le 21-11-2008 à 16:14:59
au pire, tu risque d'écraser tout tes fichiers.
honnetement,je pense pas que ça soit possible d'aller si loin en batch. A moins d'avoir sous la main un outil comme sed ou awk sous windows
Marsh Posté le 21-11-2008 à 16:23:30
On vient de me donner une réponse
for /f "delims=" %%i in (test.txt) do echo %%i;;;; >> test2.txt
Marsh Posté le 26-11-2008 à 14:38:07
Ca m'occupe
Là je voudrais paufiner, laisser le choix à l'utilisateur du nombre de points virgule via un :
set /p ptv="Entrer le nombre de points virgules souhaites : "
Mais c'est après dans la transformation de la variable d'un format chiffre donné ( par exemple la personne a tapé 6 ) en autant de points virgules ( ;;;;;; par exemple ) ..
Marsh Posté le 26-11-2008 à 14:40:38
J'ai testé maladroitement :
if '%%ptv'=='1' set ptv=;; else goto :2
:2
if '%%ptv'=='2' set ptv=;; else goto :3
:3
if '%%ptv'=='3' set ptv=;;; else goto :4
:4
if '%%ptv'=='4' set ptv=;;;; else goto :5
:5
if '%%ptv'=='5' set ptv=;;;;; else goto :6
:6
if '%%ptv'=='6' set ptv=;;;;;; else goto :7
:7
if '%%ptv'=='7' set ptv=;;;;;;; else goto :8
:8
if '%%ptv'=='8' set ptv=;;;;;;;; else goto :9
:9
if '%%ptv'=='9' set ptv=;;;;;;;;; else goto :10
:10
if '%%ptv'=='10' set ptv=;;;;;;;;;; else echo erreur poum plantage
:11
for /f "delims=" %%i in (absence.txt) do echo %%i%ptv%>> absence.csv
Mais ça marche pas, et comme je découvre vraiment le batch ... je galère et ça doit etre incohérent pour les habitués
avec un for on pourrait a priori faire plus simple, j'ai une ébauche
setlocal EnableDelayedExpansion
set /p ptv= Entrer le nombre de points virgules souhaites :
FOR /L %%i IN ( 1 2 20 ) DO if ("%%i" == "1" ) set ptv=";" else set ptv="%%ptv+;" end
mais ça doit rien vouloir dire non plus ...
Marsh Posté le 26-11-2008 à 14:58:54
J'ai ça qui marche :
set /p ptv="Entrer le nombre de points virgules souhaites : "
if '%ptv%'=='1' set ptv=;; & goto :11 else goto :2
:2
if '%ptv%'=='2' set ptv=;; & goto :11 else goto :3
:3
if '%ptv%'=='3' set ptv=;;; & goto :11 else goto :4
:4
if '%ptv%'=='4' set ptv=;;;; & goto :11 else goto :5
:5
if '%ptv%'=='5' set ptv=;;;;; & goto :11 else goto :6
:6
if '%ptv%'=='6' set ptv=;;;;;; & goto :11 else goto :7
:7
if '%ptv%'=='7' set ptv=;;;;;;; & goto :11 else goto :8
:8
if '%ptv%'=='8' set ptv=;;;;;;;; & goto :11 else goto :9
:9
if '%ptv%'=='9' set ptv=;;;;;;;;; & goto :11 else goto :10
:10
if '%ptv%'=='10' set ptv=;;;;;;;;;; & goto :11 else echo erreur poum plantage
:11
for /f "delims=" %%i in (absence.txt) do echo %%i%ptv%>> absence.csv
ren absence.txt absencefait.txt
ren absence.csv absence.txt
Mais point de vue "rentabilité" du code, c'est pas terrible, je suis limité au nombre de lignes que j'ai tapé quoi ..
Marsh Posté le 27-11-2008 à 17:02:21
Bon j'essaye de passer ça sous python, en esperant ne pas galérer derriere pour faire un .exe
Le but est toujours le meme, demander un nombre de point virgule que l'utilisateur veut rajouter a chaque ligne du fichier, modifier le fichier en conséquence.
Là j'ai pondu ça,
>>>nbptv=input(“Entrer le nombre de points virgules souhaites ( entre 1 et 20 )”) # définit combien l'utilisateur veut de points virgules
>>> ptv=";"
>>> a=1
>>> listeptv=[‘;’]
>>> while a<21:
listeptv.append(ptv)
ptv=ptv+";"
a=a+1
#ce while remplit la liste listeptv de 1 point virgule à 20 points virgules
>>> b=0
>>> listenbptv=[]
>>> while b<21:
listenbptv.append(b)
b=b+1
#ce while remplit la liste listenbptv de 0 à 20
>>> if nbptv == listenbptv[nbptv]:
ptv=listeptv[nbptv]
# vérifie que le nombre rentré au début est bien dans la listenbptv, et transforme la variable ptv en autant de
# points virgule qu'il n'en faut grace à la liste listeptv
Maintenant il faudrait que j'ouvre un fichier texte ( parce que coder le fait de proposer à l'utilisateur d'aller chercher son fichier via un explorateur, je crois pas que j'en sois capable ), que je rajoute ma variable ptv à la fin de chaque ligne du fichier, et que je referme le fichier.
Là je cale un peu
Marsh Posté le 02-12-2008 à 13:33:26
si tu veux le faire en perl, je peux t'aider... en python, moins mais bon, ça ne doit pas être trop dur...
en Perl:
use strict; #demande le nombre de point virgules #ouverture des fichiers #pour chaque ligne #fermeture des fichiers |
à adapter évidemment selon les besoins (configurer le caractère à ajouter, passer le nom de fichier en paramètre, etc.)
edit: en python, la syntaxe est fort similaire à priori
http://www.esi.umontreal.ca/~mouss [...] es_20.html
Marsh Posté le 05-12-2008 à 11:46:14
En fait j'y ai passé une bonne semaine dessus, en changeant de version jour après jour tellement je découvrais des trucs
Là j'ai un .exe une interface graphique, des menus, la possibilité de choisir le fichier dans l'explorateur, de choisir les caracteres a ajouter, le nombre de fois, etc etc
Je fonctionne avec des fonctions que j'appelle avec chaque choix de mon menu.
Chaque entrée renseigne un fichier config.cfg et la modification du fichier source ne se fait que sous certaines conditions du fichier config.cfg
Bon pour les programmeurs ça doit etre tout con et tout moche, mais je suis content de moi
On ne peut pas faire la modification du fichier sans avoir renseigner le fichier à modifier, et les caracteres a ajouter.
On ne peut pas effacer les dernieres modifications si le fichier "source" à modifier n'est pas renseigne
On ne peut pas effacer les dernieres modifications si ca a déja été fait
la fonction effacer les dernieres modifs ne fait en fait que reprendre le contenu d'un backup.txt unique crée a chaque modification ( donc si vous modifiez un deuxieme fichier, le backup du premier est écrasé ) et le met en write dans le fichier source
Et puis c'est marrant, a chaque fois que j'ai relu mon code, j'ai vu des lignes et des lignes de codes qui me semblaient bien et qui étaient en fait finalement inutile une fois que je commençais à maitriser.
Je me retrouvais avec des whiles, des compteurs pour faire des for, alors que je n'en avais pas besoin ...
Marsh Posté le 05-12-2008 à 11:52:05
Ma fonction qui correspond au bouton "appliquer la configuration au fichier source" :
Citation : def modifmaintenant(): |
C'est surement encore bien perfectible hein
Marsh Posté le 08-12-2012 à 02:46:06
hinomura a écrit : Ca m'occupe |
Je déterre ça mais ça peut servir ceux qui s'initient au batch...
Solution : mettre en place un compteur qui va incrémenter le nombre de point virgules souhaité
@echo off
rem demande de renseigner le nombre de virgule souhaité en fin de ligne
set /p ptv="Entrer le nombre de points virgules souhaites : "
:COUNT
rem initialise un compteur
set /a N=%N%+1
rem en fonction du compteur, les points virgules incrémentent
set PV=%PV%;
rem si les points virgules atteignent de nombre saisie nous pasons à la suite du traitement
If %N%==%ptv% goto Ecriture
rem si le nombre des points virgules ne correspondent pas, nous retournons pour en incrémenter un de plus
goto COUNT
:Ecriture
for /f "delims=" %%i in (test.txt) do echo %%i%PV% >> test2.txt
Marsh Posté le 21-11-2008 à 14:52:26
Hello, une demande surement con pour certains, mais je cherche le moyen pour rajouter ;;;;;; en fin de chaque ligne d'un fichier texte.
Ca doit etre possible avec un bête .bat, je cherche un peu mais j'ai pas vraiment trouvé de commande pour faire ça comme je veux.
Sachant que malgré tout, je cherche une solution que je puisse comprendre, une page php de 30 lignes de long faisant ça ne m'interesse pas, j'arriverais pas à capter
Merci
Message édité par hinomura le 21-11-2008 à 15:10:07