traitement d'un fichier texte

traitement d'un fichier texte - Perl - Programmation

Marsh Posté le 13-12-2006 à 14:03:04    

je veut supprimer les repertoire de ce fichier par exemple
 

Code :
  1. /image/
  2. /image/bin/arch
  3. /image/bin/
  4. /image/bin/bash
  5. /image/bin/bunzip2


 
pour avoir a la sortie un autre fichier ayant cette forme
 

Code :
  1. /image/bin/arch
  2. /image/bin/bash
  3. /image/bin/bunzip2


 
 
comment je peut faire ca avec perl svp :bounce:

Reply

Marsh Posté le 13-12-2006 à 14:03:04   

Reply

Marsh Posté le 13-12-2006 à 14:08:22    

un truc dans le genre

Code :
  1. while (<> )
  2. {
  3.   print unless (/\\/\\s*$/); # N'affiche pas les lignes qui se terminent par un '/'
  4. }


 
mais ne serait-il pas plus simple de ne lister directement que les fichiers normaux, et pas les répertoires ? Comment obtiens-tu la liste de tes fichiers ?
 
EDIT: commentaire et traitement du cas où les lignes se terminent par des espaces


Message édité par franceso le 13-12-2006 à 14:12:51
Reply

Marsh Posté le 13-12-2006 à 14:36:10    

un truc de ce genre ??
la copie ca marche mais le unless je n'est compris comment l'utilisé
 

Code :
  1. open(ORIGINAL,"image_part[0].txt" ) || die "Impossible de d'ouvrir le fichier original";
  2. open(COPIE,">copie.txt" ) || die "Impossible de d'ouvrir le fichier copie";
  3. while (<ORIGINAL> )
  4.     {
  5.      #print COPIE $_;
  6.      #print unless (/\/\s*$/); # N'affiche pas les lignes qui se terminent par un '/'
  7.     }
  8. close(COPIE);
  9. close(ORIGINAL);


 

Reply

Marsh Posté le 13-12-2006 à 14:39:24    

bin tu peux le remplacer par

Code :
  1. print if /[^\/]$/;


qui est peut-être plus aisement compréhensible vu que c'est affiche si le dernier caractère de la ligne n'est pas un /


Message édité par anapajari le 13-12-2006 à 14:39:35
Reply

Marsh Posté le 13-12-2006 à 14:50:26    

merci ca marche avec la premiere mais avec cette forme.
c'est parceque je ne connais pas le perl  :pt1cable:  
 

Code :
  1. open(ORIGINAL,"image_part[0].txt" ) || die "Impossible de d'ouvrir le fichier original";
  2. open(COPIE,">copie.txt" ) || die "Impossible de d'ouvrir le fichier copie";
  3. while (<ORIGINAL> )
  4.     {
  5.      print COPIE unless (/\/\s*$/); # N'affiche pas les lignes qui se terminent par un '/';
  6.     }
  7. close(COPIE);
  8. close(ORIGINAL);

Reply

Marsh Posté le 13-12-2006 à 15:18:38    

Code :
  1. print if /[^\/]\s*$/;


Message édité par anapajari le 13-12-2006 à 15:19:04
Reply

Marsh Posté le 13-12-2006 à 15:32:30    

Citation :

merci ca marche avec la premiere mais avec cette forme.


Ca marcherait aussi avec l'expression régulière que t'a donnée anapajari. (mais fais gaffe aux '\' qui sautent dans le forum)
 

Citation :

c'est parceque je ne connais pas le perl  :pt1cable:


OK, le principe, c'est que si tu rajoutes 'unless (...)' à la fin d'une instruction, cette instruction n'est exécutée que si la condition est fausse.
 
En l'occurrence, l'instruction est un bête 'print COPIE' (sous-entendu $_)
La condition à vérifier est une expression régulière qui signifie que la ligne se termine par un '/' éventuellement suivi d'espaces.
 


---------------
TriScale innov
Reply

Marsh Posté le 28-09-2008 à 16:28:30    

Bonjour aymanouch, bonjour à tous,
 
Je débute Perl que je viens d'installer soous windows.
Voilà ma situation: j'ai un fichier texte 'lefic.txt' qui contient les 8 lignes suivantes:
______________________
Allo 132, Allo 132
a525, b525
c415, h415,c414,c413,c412,c411, c410
c413 h415,c414,c413,c412,c411, c410
c412 h415,c414,c413,c412,c411, c410
c411, h415,c414,c413,c412,c411, c410
c410, h415,c414,c413,c412,c411, c410
c414 h415,c414,c413,c412,c411, c410
________________________________
avec l'arborescence d:\dossiersDR\lefic.txt.
 
Je veux écrire un script Perl qui fasse:
1. une copie de lefic.txt avec un nouveau nom lefic2.txt(dans le même repertoire)
2. dans le lefic2.txt tout c413 va être substitué par n212
3. dans le lefic2.txt tout 525 va être substitué par 606
4. dans le lefic2.txt tout 414 va être supprimé (ou remplacé par '').
 
Merci infiniment.
 
 

Reply

Marsh Posté le 28-09-2008 à 19:31:56    

Eh bien, si tu nous montrait ton début de script?
Parce qu'il n'est pas question qu'on fasse ton boulot à ta place.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-09-2008 à 13:14:02    

maestro1303 a écrit :

Merci infiniment.


Bonjour  :)
 
Tu nous remercies, c'est bien, et nous t'en remercions  :D mais nous remercier de quoi exactement ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 29-09-2008 à 13:14:02   

Reply

Marsh Posté le 30-09-2008 à 09:44:25    

Excellent : http://www.developpez.net/forums/d [...] n-fichier/
 
Quand on ne veut pas montrer son code, qu'est-ce qu'on fait ?
 
Ben, on fait un copié collé de son topic dans un autre forum pardi ! :lol:  :lol:  :lol:


Message édité par Aricoh le 30-09-2008 à 09:45:06

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Sujets relatifs:

Leave a Replay

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