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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1815001
hinomura
Posté le 21-11-2008 à 14:52:26  profilanswer
 

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
mood
Publicité
Posté le 21-11-2008 à 14:52:26  profilanswer
 

n°1815022
jagstang
Pa Capona ಠ_ಠ
Posté le 21-11-2008 à 15:10:11  profilanswer
 

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?  
n°1815062
hinomura
Posté le 21-11-2008 à 16:12:29  profilanswer
 

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
n°1815063
jagstang
Pa Capona ಠ_ಠ
Posté le 21-11-2008 à 16:14:59  profilanswer
 

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?  
n°1815066
hinomura
Posté le 21-11-2008 à 16:23:30  profilanswer
 

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

n°1815388
lennelei
Posté le 22-11-2008 à 20:54:50  profilanswer
 

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

n°1817072
hinomura
Posté le 26-11-2008 à 14:38:07  profilanswer
 

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
n°1817076
hinomura
Posté le 26-11-2008 à 14:40:38  profilanswer
 

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

n°1817093
hinomura
Posté le 26-11-2008 à 14:58:54  profilanswer
 

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

n°1817860
hinomura
Posté le 27-11-2008 à 17:02:21  profilanswer
 

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

mood
Publicité
Posté le 27-11-2008 à 17:02:21  profilanswer
 

n°1820608
lennelei
Posté le 02-12-2008 à 13:33:26  profilanswer
 

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
n°1822363
hinomura
Posté le 05-12-2008 à 11:46:14  profilanswer
 

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
n°1822368
hinomura
Posté le 05-12-2008 à 11:52:05  profilanswer
 

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]

n°2167282
vangskyfox
Posté le 08-12-2012 à 02:46:06  profilanswer
 

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

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

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

 

Sujets relatifs
[Php/Mysql]Effacer ligne d'un tableau de données[Résolu] Jeu de caractères
Ajouter une ligne à un tableau en javascript[resolu]caracteres accentué (variable TEXT d'une table Mysql)
Supprimer une ligne d'un tableau en javascript[Delphi]Saisir une chaine de caractères dans un programme extérieur
[Silverligth] taille auto canvaslister le contenu d'un fichier sur une seule ligne
creation de jeux en ligneDéplacement de chaines caractères
Plus de sujets relatifs à : Rajout auto de caractères en fin de ligne d'un txt


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