Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/01/2013, 01h09   #1
scylllaride
Invité de passage
 
Homme
Cadre
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Australie

Informations professionnelles :
Activité : Cadre

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 1
Points : 1
Par défaut Ligne de commande : Inserer le nom du fichier dans le fichier

Bonjour à tous,
Avant tout, je passe pas mal de temps sur ce site que j'adore. Encore merci à tous.
Depuis quelques jours je tente de me mettre à Perl, avant je faisait pas mal de Matlab et VBA.
Pour le moment je trouve que Perl est plus concis pour l'usage que j'en ai donc tout se passe pas mal, ca va venir ca va venir....

J'ai fait le tour du site mais je n'ai pas trouvé de réponses,

Le cas de figure :
- J'ai dans un répertoire un ensemble de fichier .txt, toutes les manips sont faites mais j'aimerais savoir comment insérer au début de chaque fichier son nom, sans l'extension. Idéalement, via une ligne de commande.

Ex :
Repertoire
Fichier1.txt
Fichier2.txt
FIchier3.txt

Contenu initial du Fichier1.txt :
-
blablabla
-
blablablabla
bla
-
b

Ce que je voudrais :
Fichier1
blablabla
-
blablablabla
bla
-
b


Merci d'avance pour notre aide, s'il manque des infos ne pas hésiter.

A++
scylllaride est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2013, 12h54   #2
Jiheme44
Membre du Club
 
Homme Jean Michel
Ingénieur intégration
Inscription : décembre 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Jean Michel
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration

Informations forums :
Inscription : décembre 2012
Messages : 33
Points : 56
Points : 56
une ligne de commande ? quel langage ?
j'ai déjà vu ce genre de problème en batch windows, il fallait rajouter un entête présent dans un fichier texte dans une liste de fichiers :
http://www.clubic.com/forum/programm....html#13304148

dans ton cas, il faudrait faire un truc du genre :
Code :
1
2
3
4
5
6
7
8
9
10
11
@echo off
echo Debut du programme
REM création d'un répertoire de sortie contenant les fichiers modifiés
mkdir sortie
 
for /f "delims=" %%i in ('dir /b *.txt') do (
echo %%i > tmp.txt
if "%%i" NEQ "tmp.txt" copy /B tmp.txt+"%%i" sortie\\"%%i" >> NUL
)
 
echo Fin du programme
et placer tout ça ans un fichier avec l'extension .bat'

en perl, je ferais un programme de la sorte (à tester et vérifier), faire gaffe aux chemins et au séparateur que j'utilise (/ dans le cas de windows ).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
mkdir( "sortie" );
 
my @listeFichiers = getListeFichiers(); //Fonction à terminer
foreach my $fichier (@listeFichiers){
 my $nom = $fichier;
 $nom =~ s/\.[^.]*$//;
 
 open( FILE , "<$fichier") or die("Can't open $fichier : $!");
 my @lignes = <FILE>;
 close( FILE );
 
 open( FILE_OUT , ">sortie/$fichier");
 print FILE_OUT $name, "\n";
 print FILE_OUT @lignes:
 close( FILE_OUT );
}
 
sub getListeFichiers{
 my @listeFichiers = ();
 
 //TODO
 //voir les tutos sur le net
 
 return @listeFichiers;
 
}
Jiheme44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2013, 14h09   #3
Philou67430
Expert Confirmé
 
Inscription : avril 2009
Messages : 2 678
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : avril 2009
Messages : 2 678
Points : 3 152
Points : 3 152
Un uniligne perl :

Code :
perl -pi -E 'say $ARGV if $. == 1; $. = 0 if eof' *.txt
Attention cependant, si le chemin est relatif lors de l'appel, c'est le nom relatif qui est ajouté :

Code :
perl -pi -E 'say $ARGV if $. == 1; $. = 0 if eof' ../tmp/toto.txt
donne :
../tmp/toto.txt
__________________
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Using strict and warnings is good for you.
Philou67430 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2013, 23h39   #4
scylllaride
Invité de passage
 
Homme
Cadre
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Australie

Informations professionnelles :
Activité : Cadre

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 1
Points : 1
Merci pour vos réponses,

>Jiheme44 : pour le moment et dans ce cas, je passe pas des unilignes.
En fait il y a plusieurs raisons, déjà, c'est pour répondre à des demandes ponctuelles de collègues sur des traitements de données bioinfo, ensuite je suis sous mac et dans un autre pays.
pas grave? Et bien si, ca change pas mal de chose :
- Perl et Mac, c'est peut etre parceque je suis débutant, mais clairement c'est pas super compatible, disons que je passe plus de temps à monter l'environnement qu'autre chose (pb de liaisons, de déclarations, de modules non trouvé, etc etc....). J'ai déjà pu remarqué que les simples quotes posent souvent problème....il faut les resaisir par la personne qui exécute le code :-)
- Dans un autre pays avec des collègues non informaticien.... la vous comprendrez tous ce qu'un utilisateur est capable de faire avec un code qui répond aux besoins et dire que ca marche pas...bla bla bla

IL me faut encore un peu de temps, pour réussir à tout faire dans un seul fichier Perl et communiquer mon code aux collègues pour qu'ils puissent simplement l'exécuter...

Je préfére privilégier Perl pour les traitements, donc je regarde tes codes


> Philou67430 : Merci pour les unilignes, ca ajoute bien dans chaque fichier le nom du fichier (dans la mesure ou on se trouve dans le répertoire courant avec le shell). Par contre ca ajoute l'extension du fichier, je vais voir comment virer l'extension pour laisser uniquement le nom di fichier, )
Des que je trouve qqc je posterais

A+
scylllaride est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2013, 09h48   #5
Jiheme44
Membre du Club
 
Homme Jean Michel
Ingénieur intégration
Inscription : décembre 2012
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Jean Michel
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration

Informations forums :
Inscription : décembre 2012
Messages : 33
Points : 56
Points : 56
je me permet de reprendre l'uniligne de philou, en la modifiant pour ajouter le nom du fichier sans l'extension :

Code :
perl -pi -e 'my $var = $ARGV; $var =~ s/\.[^.]*$//;print "$var\n" if $. == 1; $. = 0 if eof' *.txt
ça, c'est le code pour ma version de perl. (v5.8.8

Pour respecter la version perl de philou :
Code :
perl -pi -E 'my $var = $ARGV; $var =~ s/\.[^.]*$//;say "$var\n" if $. == 1; $. = 0 if eof' *.txt
à noter que je ne peux pas tester cette version (of course).
et j'ai rajouté un "\n" pour avoir le nom du fichier uniquement sur la première ligne.
Jiheme44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2013, 14h04   #6
scylllaride
Invité de passage
 
Homme
Cadre
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Australie

Informations professionnelles :
Activité : Cadre

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 1
Points : 1
Merci Jean Michel,
je vais essayer ces codes un peu plus en détail.
je suis sous mac , perl5 (revision 5 version 12 subversion 4).

Et en vitesse, j'ai lancé les deux codes, il y a modification des fichiers sources (modification de la date de mise à jour), mai sje ne vois pas la différence (pas d'ajout du nom dans le fichier......)

Il est minuit et je m'y recolle asap.

Encore merci.

A+
scylllaride est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 02h14   #7
scylllaride
Invité de passage
 
Homme
Cadre
Inscription : janvier 2013
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Australie

Informations professionnelles :
Activité : Cadre

Informations forums :
Inscription : janvier 2013
Messages : 5
Points : 1
Points : 1
heu... quand je disais qu'il était minuit hein.... j'ai relancé les scripts et c'est ok....il y a un truc qui m'échappe la quand même.
Bref l'important c'est que ca passe...encore merci à tous.

c'est résolu
A+
scylllaride est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h07.


 
 
 
 
Partenaires

Hébergement Web