[Perl] Saut de ligne + extraction fichiers
Résolu/Fermé
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
-
5 avril 2007 à 18:40
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 avril 2007 à 18:43
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 9 avril 2007 à 18:43
A voir également:
- [Perl] Saut de ligne + extraction fichiers
- Site de vente en ligne particulier - Guide
- Partage de photos en ligne - Guide
- Aller à la ligne excel - Guide
- Extraction video youtube - Guide
- Wetransfer gratuit fichiers lourd - Guide
11 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 avril 2007 à 19:20
5 avril 2007 à 19:20
Salut,
il faut dire un peu plus
l'extension ne compte pas trop
en revanche quelles lignes tu veux extraire?
pour supprimer le saut de ligne c'est bien de savoir la provenance de tes fichiers (win, mac, linux, unix, etc.)
pour séparer par des virgules tu n'as qu'à remplacer le séparateur actuel par virgule (à savoir aussi ce que veut tu faire quand la virgule existe déjà)
en bref un peu plus de détails
merci.
il faut dire un peu plus
l'extension ne compte pas trop
en revanche quelles lignes tu veux extraire?
pour supprimer le saut de ligne c'est bien de savoir la provenance de tes fichiers (win, mac, linux, unix, etc.)
pour séparer par des virgules tu n'as qu'à remplacer le séparateur actuel par virgule (à savoir aussi ce que veut tu faire quand la virgule existe déjà)
en bref un peu plus de détails
merci.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 avril 2007 à 20:58
5 avril 2007 à 20:58
tu ne m'aide pas trop :-)
tu parles de 4, 7 et 13
mais ça sera valable toujours ce critére?
je suppose que tes fichiers sont bien plus grands
par exemple dant ton cas je chosirais comme critére les lignes qui commencent avec CO et <![CDATA
voici un petit exemple qui n'est pas tout à fait la solution de ton problème, en plus ce n'est pas non plus la meilleure
lami20j
tu parles de 4, 7 et 13
mais ça sera valable toujours ce critére?
je suppose que tes fichiers sont bien plus grands
par exemple dant ton cas je chosirais comme critére les lignes qui commencent avec CO et <![CDATA
voici un petit exemple qui n'est pas tout à fait la solution de ton problème, en plus ce n'est pas non plus la meilleure
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl use warnings; use strict; while (<DATA>){ next unless /CO|<!\[CDATA/; s/[\[<!>\]]//g; s/(cdata)/$1,/i; s/\s+/,/g; s/,$//; print; } print "\n"; __END__ <TABLE> <ROW> <SITNAME> CO_DB2_Appl_CatCache_Hit_Low </SITNAME> <TEXT> <![CDATA[An application experiences low catalog cache hit ratio]]> </TEXT> <AFFINITIES> 00000000000000000000W0000000000000########F </AFFINITIES> <PDT> <![CDATA[*IF *VALUE KUDDB2APPLGROUP00.cat_cache_hit_ratio *LT 50]]> </PDT> lami20j@debian:~/trash$ perl ccm.pl CO_DB2_Appl_CatCache_Hit_LowCDATA,An,application,experiences,low,catalog,cache,hit,ratioCDATA,*IF,*VALUE,KUDDB2APPLGROUP00.cat_cache_hit_ratio,*LT,50--
lami20j
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
5 avril 2007 à 21:06
5 avril 2007 à 21:06
ok j'ai dû mal m'exprimer... en fait j'aurais besoin de CO_DB2_Appl_CatCache_Hit_Low ; An application experiences low catalog cache hit ratio ; *IF *VALUE KUDDB2APPLGROUP00.cat_cache_hit_ratio *LT 50 "saut de page"
j'ai un petit script qui fait à peu près ce que je veux, mais il n'est pas "fini"... est ce que je peux te l'envoyer ?
Merci.
j'ai un petit script qui fait à peu près ce que je veux, mais il n'est pas "fini"... est ce que je peux te l'envoyer ?
Merci.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 avril 2007 à 21:18
5 avril 2007 à 21:18
alors c'est comme ça
Tu peux afficher ton script ici.
lami20j@debian:~/trash$ cat ccm.pl #!/usr/bin/perl use warnings;use strict; while (<DATA>){ next unless /CO|<!\[CDATA/; s/[\[<!>\]]//g; s/cdata//i; s/\n/;/; print; } print "\n"; __END__ <TABLE> <ROW> <SITNAME> CO_DB2_Appl_CatCache_Hit_Low </SITNAME> <TEXT> <![CDATA[An application experiences low catalog cache hit ratio]]> </TEXT> <AFFINITIES> 00000000000000000000W0000000000000########F </AFFINITIES> <PDT> <![CDATA[*IF *VALUE KUDDB2APPLGROUP00.cat_cache_hit_ratio *LT 50]]> </PDT> lami20j@debian:~/trash$ perl ccm.pl CO_DB2_Appl_CatCache_Hit_Low;An application experiences low catalog cache hit ratio;*IF *VALUE KUDDB2APPLGROUP00.cat_cache_hit_ratio *LT 50;
Tu peux afficher ton script ici.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
5 avril 2007 à 21:26
5 avril 2007 à 21:26
Je n'avais pas osé parce qu'il est un peu "bricolé"...
my @files = glob ("*.sit");
foreach $file (@files) {
open FICHIER,"< $file" or die "Aucun fichier !";
open WRITER,">> tmp.txt" or die "Le fichier ne peut être édité !\n";
$i=0;
$var=0;
while ($ligne = <FICHIER>)
{
if($i==3){
print WRITER $ligne ;
}
if($i==6){
if($ligne=~ /\<\!\[CDATA\[/){
if($'=~ /\]\]\>/){
print WRITER "$` \n";
}
}
}
if($i==12){
if($ligne=~ /\<\!\[CDATA\[/){
if($'=~ /\]\]\>/){
print WRITER "$` \n";
}
}
}
$i++;
}
}
close FICHIER;
close WRITER;
open FICHIER,"< tmp.txt" or die "Le fichier n'existe pas !";
open WRITER,"> resultat.txt" or die "Le fichier ne peut être édité !\n";
@lignes=<FICHIER>;
foreach $ligne (@lignes){
$res=chomp ($ligne);
print WRITER "$ligne ; ";
}
close FICHIER;
close WRITER;
le problème est que je n'arrive pas (avec ce script) à récupérer dans plusieurs fichiers la même combinaison de lignes, et à en faire une liste...
my @files = glob ("*.sit");
foreach $file (@files) {
open FICHIER,"< $file" or die "Aucun fichier !";
open WRITER,">> tmp.txt" or die "Le fichier ne peut être édité !\n";
$i=0;
$var=0;
while ($ligne = <FICHIER>)
{
if($i==3){
print WRITER $ligne ;
}
if($i==6){
if($ligne=~ /\<\!\[CDATA\[/){
if($'=~ /\]\]\>/){
print WRITER "$` \n";
}
}
}
if($i==12){
if($ligne=~ /\<\!\[CDATA\[/){
if($'=~ /\]\]\>/){
print WRITER "$` \n";
}
}
}
$i++;
}
}
close FICHIER;
close WRITER;
open FICHIER,"< tmp.txt" or die "Le fichier n'existe pas !";
open WRITER,"> resultat.txt" or die "Le fichier ne peut être édité !\n";
@lignes=<FICHIER>;
foreach $ligne (@lignes){
$res=chomp ($ligne);
print WRITER "$ligne ; ";
}
close FICHIER;
close WRITER;
le problème est que je n'arrive pas (avec ce script) à récupérer dans plusieurs fichiers la même combinaison de lignes, et à en faire une liste...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 avril 2007 à 21:30
5 avril 2007 à 21:30
Je n'avais pas osé parce qu'il est un peu "bricolé"...
Oui, tu as raison :-D
Pour ne pas se compliquer la vie, voilà ce que je te propose
1. compresse tes fichiers (je vois que c'est l'extension .sit)
2. envoi le fichier compressé par mail (regarde mon profil)
je vais le traiter et je te l'enverrai
à vrai dire je n'ose pas bidouiller dans ton code, je vais écrire le mien
à toi de voir
Oui, tu as raison :-D
Pour ne pas se compliquer la vie, voilà ce que je te propose
1. compresse tes fichiers (je vois que c'est l'extension .sit)
2. envoi le fichier compressé par mail (regarde mon profil)
je vais le traiter et je te l'enverrai
à vrai dire je n'ose pas bidouiller dans ton code, je vais écrire le mien
à toi de voir
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
5 avril 2007 à 21:41
5 avril 2007 à 21:41
Merci beaucoup, c'est très sympa de ta part, je vais de ce pas préparer le mail...
A+
A+
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 avril 2007 à 22:37
5 avril 2007 à 22:37
Voici le script.
A savoir que je l'ai testé sur Linux.
J'ai remarqué que les fichiers ne coresspondent pas toujours (je parle du numéro de ligne)
Ex: regarde les fichiers
CO_MVS_Adress_Space_C012....
Peut être tu seras obligé de faire des petites modifications.
Je dois partir, mais à mon retour je vais le tester sous windows
A savoir que je l'ai testé sur Linux.
J'ai remarqué que les fichiers ne coresspondent pas toujours (je parle du numéro de ligne)
Ex: regarde les fichiers
CO_MVS_Adress_Space_C012....
Peut être tu seras obligé de faire des petites modifications.
Je dois partir, mais à mon retour je vais le tester sous windows
#!/usr/bin/perl use warnings;use strict; my @sit = glob("*.sit"); open ECRIRE,">:crlf","resultat.txt" or die "E/S : $!\n"; foreach (@sit){ open F_LIRE,"<:crlf","$_" or warn "E/S : $!\n"; while (<F_LIRE>){ next unless (4..4 or 7..7 or 13..13); s/[\[<!>\]\(\)]//g; s/cdata//i; s/\r?\n/;/; print ECRIRE; } print ECRIRE "\n"; close F_LIRE; } close ECRIRE; __END__
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
6 avril 2007 à 08:28
6 avril 2007 à 08:28
Je vais, moi aussi, le tester... En attendant merci beaucoup.
loulou06
Messages postés
7
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
9 avril 2007
9 avril 2007 à 18:40
9 avril 2007 à 18:40
Effectivement cela fonctionne sous Windows.
J'ai vu, moi aussi, qu'il y avait des petites différences selon les fichiers, mais ce n'est pas grand chose...
Le fait est que c'est beaucoup plus "propre" que ce que j'avais fait et ça fonctionne mieux !!!
Merci beaucoup lami20j,
A+
J'ai vu, moi aussi, qu'il y avait des petites différences selon les fichiers, mais ce n'est pas grand chose...
Le fait est que c'est beaucoup plus "propre" que ce que j'avais fait et ça fonctionne mieux !!!
Merci beaucoup lami20j,
A+
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
9 avril 2007 à 18:43
9 avril 2007 à 18:43
De rien :-)
5 avril 2007 à 19:54
<TABLE>
<ROW>
<SITNAME>
CO_DB2_Appl_CatCache_Hit_Low
</SITNAME>
<TEXT>
<![CDATA[An application experiences low catalog cache hit ratio]]>
</TEXT>
<AFFINITIES>
00000000000000000000W0000000000000########F
</AFFINITIES>
<PDT>
<![CDATA[*IF *VALUE KUDDB2APPLGROUP00.cat_cache_hit_ratio *LT 50]]>
</PDT>
le caractère de saut de ligne est à la fin de la ligne 4 le fichier provient d'une base DB2 (à priori) sur un serveur W2003...
En ce qui concerne les virgules, au départ je n'en ai pas puisque ce sont des champs de tables, mais je voudrais en rajouter pour pouvoir traiter le fichier avec Excel par exemple... reste le problème des fichiers à stocker dans un seul fichier "résultat"...
Espérant que ces infos te serviront ?
Merci