Rajout auto de caractères en fin de ligne d'un txt

Rajout auto de caractères en fin de ligne d'un txt - Shell/Batch - Programmation

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 :D
 
Merci ;)


Message édité par hinomura le 21-11-2008 à 15:10:07
Reply

Marsh Posté le 21-11-2008 à 14:52:26   

Reply

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é


Message édité par jagstang le 21-11-2008 à 15:11:57

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

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++
 
 
edit : testé


 
Remplace quoi de où en fait ? :D
 
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 :D
 
( et, oui j'avoue, c'est totalement moche et anti-performant comme code :D )


Message édité par hinomura le 21-11-2008 à 16:15:23
Reply

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


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 21-11-2008 à 16:23:30    

On vient de me donner une réponse  [:ddr555]  
 
for /f "delims=" %%i in (test.txt) do echo %%i;;;; >> test2.txt

Reply

Marsh Posté le 22-11-2008 à 20:54:50    

Comme quoi... le DOS n'est pas mort ^^

Reply

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 ) .. :/

Message cité 1 fois
Message édité par hinomura le 26-11-2008 à 14:39:00
Reply

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 :D
 
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 ...

Reply

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

Reply

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 :D ), que je rajoute ma variable ptv à la fin de chaque ligne du fichier, et que je referme le fichier.
Là je cale un peu :D

Reply

Marsh Posté le 27-11-2008 à 17:02:21   

Reply

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:

 


#!/usr/bin/perl

 

use strict;

 

#demande le nombre de point virgules
print("Entrer le nombre de points virgules souhaites ( entre 1 et 20 ) :" );
my $nb = <STDIN>;

 

#ouverture des fichiers
open (FIC_E,'analyse.pl') or die "analyse.pl : $!";
open (FIC_S,'>analyse2.pl') or die "analyse.pl : $!";

 

#pour chaque ligne
while (<FIC_E> ) {
 chomp;
#copie la ligne dans le second fichier et ajoute les points virgules à la fin
 print FIC_S $_,";"x$nb,"\n";
}

 

#fermeture des fichiers
close FIC_E;
close FIC_S;

 
 

à 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


Message édité par lennelei le 02-12-2008 à 13:35:50
Reply

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 :D
 
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
 
http://images.forum-auto.com/mesimages/2951/interface.jpg
 
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  [:ddr555]  
 
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 ... :lol:
 


Message édité par hinomura le 05-12-2008 à 11:50:39
Reply

Marsh Posté le 05-12-2008 à 11:52:05    

Ma fonction qui correspond au bouton "appliquer la configuration au fichier source" :
 

Citation :

def modifmaintenant():
        import tkMessageBox as Msg
        f=open('config.cfg','r') # on ouvre les fichiers de configuration en lecture 'r' tel que f est config.cfg
        fichieraouvrir=f.readline() # on definit que la variable fichieraouvrir est la premiere ligne du fichier f
        caractere=f.readline() # on definit que la variable caractere est la deuxieme ligne du fichier f
        backup=f.readline() # on definit que la variable backup est la troisieme ligne du fichier f
        f.close() # on ferme f puis g la ligne suivante
        if 'Non defini' in fichieraouvrir:  
            Msg.showwarning(title="Attention",message="Le fichier a ouvrir n'a pas ete specifie, le programme ne peut pas modifier le fichier" )
        else:
            if 'Non defini' in caractere:
                Msg.showwarning(title="Attention",message="Vous n'avez pas choisi de caracteres a ajouter, le programme ne peut pas modifier le fichier" )
            else:
                if '\n' in fichieraouvrir:
                    fichieraouvrir=fichieraouvrir.replace('\n','')
                if '\n' in caractere:
                    caractere=caractere.replace('\n','')
                f=open('config.cfg','w')
                f.write(fichieraouvrir)
                f.write('\n')
                f.write(caractere)
                f.write('\n')
                f.write('backup.txt')
                f.close()  
                f=open(fichieraouvrir, 'r') # j'ouvre le fichier en lecture
                contenutotal=f.read() # contenutotal = toutes les lignes du fichier source
                f.close()
                g=open('backup.txt', 'w') # j'ouvre le fichier en lecture
                g.write(contenutotal) # j'y ecris les donnes d'origine
                g.close()
                g=open(fichieraouvrir, 'r') # j'ouvre le fichier en lecture
                h=open('temp.txt', 'w')
                for ligne in g: # pour chaque enregistrement ( nomme ligne ) de [ ... contenutotal / g ... ], faire :
                    if '\n' in ligne:
                        ligne=ligne.replace('\n' , caractere+'\n')
                        h.write(ligne)
                    else:
                        ligne=ligne+caractere
                        h.write(ligne)
                g.close()
                h.close()
                f=open('temp.txt', 'r')
                g=open(fichieraouvrir, 'w')
                transfert=f.read()
                g.write(transfert)
                f.close()
                g.close()
                import os
                os.remove('temp.txt')


 
C'est surement encore bien perfectible hein  [:ddr555]

Reply

Marsh Posté le 08-12-2012 à 02:46:06    

hinomura a écrit :

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 ) .. :/


 
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


Message édité par vangskyfox le 08-12-2012 à 02:48:15
Reply

Sujets relatifs:

Leave a Replay

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