Je cherche des suggestions sur la façon d'optimiser ce script Perl.Perl Optimization Recommandation
J'ai ce script pour faire un reformatage mineur d'un fichier. Le script procède comme suit:
- Lit un "|" fichier délimité à partir de STDIN
- Supprime les espaces de fin,
- Enlève "NULL" chaîne de texte
- Transforme des colonnes avec des dates au format "AAAAMMJJ" de "AAAA-MM-JJ hh: mm" format de date.
- Imprime vers STDOUT et fait un kluge pour éviter de perdre la dernière colonne de données quand elle est NULL. Le nombre de colonnes doit être le même pour chaque ligne.
entrée de l'échantillon:
.091590.S |CHF|SWX|2011-05-23 00:00| 77.25| NULL| NULL| 78.620000000000005| NULL
.091590.S |CHF|SWX|2011-05-24 00:00| 77.599999999999994| NULL| NULL| 77.25| NULL
.091590.S |CHF|SWX|2011-05-25 00:00| 77.760000000000005| NULL| NULL| 77.599999999999994| NULL
.091590.S |CHF|SWX|2011-05-26 00:00| 77.430000000000007| NULL| NULL| 77.760000000000005| NULL
.091590.S |CHF|SWX|2011-05-27 00:00| 77.909999999999997| NULL| NULL| 77.430000000000007| NULL
.091590.S |CHF|SWX|2011-05-30 00:00| 78.060000000000002| NULL| NULL| 77.909999999999997| 3506
FormattingScript.pl [col]
Où [col] peut être un nombre unique ou une liste de numéros délimités par une virgule. Cette entrée détermine la ou les colonnes nécessitant une conversion de date.
@updcol = split(',',@ARGV[0]);
while (<STDIN>)
{
s/.$/|DATAEND/g; ## USING THIS TO KEEP FROM TRUNCATING NULL LAST COLUMN
s/^\s*//g;
s/\s*$//g;
s/\s*\|/\|/g;
s/\|\s*/\|/g;
s/\|NULL\|/\|\|/g;
s/\|NULL\s*$/\|/g;
s/\|NULL\s*/\|/g;
s/\|NULL$/\|/g;
@dataline = split('\|',$_);
if (@updcol[0] != 999) { ## REFORMAT DATES IF PARAM IS NOT 999
foreach my $col (@updcol) {
$dataline[$col]=substr($dataline[$col],0,4).substr($dataline[$col],5,2).substr($dataline[$col],8,2);
}}
$dataline[-1]="";
$line=join('|',@dataline);
print substr($line,0,-1)."\n";
}
exit 0;
Exemple de sortie:
.091590.S|CHF|SWX|2011-05-23 00:00|77.25|||78.620000000000005|
.091590.S|CHF|SWX|2011-05-24 00:00|77.599999999999994|||77.25|
.091590.S|CHF|SWX|2011-05-25 00:00|77.760000000000005|||77.599999999999994|
.091590.S|CHF|SWX|2011-05-26 00:00|77.430000000000007|||77.760000000000005|
.091590.S|CHF|SWX|2011-05-27 00:00|77.909999999999997|||77.430000000000007|
.091590.S|CHF|SWX|2011-05-30 00:00|78.060000000000002|||77.909999999999997|3506
Veuillez vous rappeler [les règles du Club Optimisation] (http://stackoverflow.com/a/177132/554546). Pourquoi avez-vous besoin d'optimiser ce programme? –