Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Homme Profil pro
    Cadre
    Inscrit en
    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++

  2. #2
    Membre régulier
    Homme Profil pro Jean Michel
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    43
    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 : 43
    Points : 81
    Points
    81

    Par défaut

    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;
     
    }

  3. #3
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 993
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 993
    Points : 3 424
    Points
    3 424

    Par défaut

    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.

  4. #4
    Invité de passage
    Homme Profil pro
    Cadre
    Inscrit en
    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

    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+

  5. #5
    Membre régulier
    Homme Profil pro Jean Michel
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    43
    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 : 43
    Points : 81
    Points
    81

    Par défaut

    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.

  6. #6
    Invité de passage
    Homme Profil pro
    Cadre
    Inscrit en
    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

    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+

  7. #7
    Invité de passage
    Homme Profil pro
    Cadre
    Inscrit en
    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

    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+

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •