Hallo zusammen,
ein Kollege hat mir einst ein kleinen Perl-Programm programmiert. Dieses kopiert den Text aus mehreren Dateien zusammen in eine. Dabei werden jeweils die ersten Zeilen ausgelassen, da hier der Datenheader steht. Das Programm funktioniert soweit wie es soll, ist aber recht langsam. Könnt ihr mir sagen, wie das Programm zu verbessern wäre. Ich selbst habe jedoch nur wenig Ahnung von Perl, daher wären vorallem konkrete Hinweise hilfreich!
Besten Dank!
Im folgenden Programm habe ich die Pfade gekürzt
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#N:\...\Auswertung
$input_directory = "C:\\Answ...TI\\";
$output_directory = "N:\\e...ertung\\";
$output_filename = "ergebnisse.txt";
@input_filenames = (
'2ds.VD',
'2ds-csp.VD',
'2ds-cspswh.VD',
'2ds-swh.VD',
'4ds.VD',
'4ds-csp.VD',
'6ds.VD',
'6ds-csp.VD',
);
# prepare output file
open OUTFILE, ">", $output_directory.$output_filename or die "Cannot open FILE $output_filename in $output_directory.\n";
# foreach input file, open it, and process
foreach $file (@input_filenames) {
# Get the scenario ID, ie. the first part of the filename up to the .
$scenario_id = $file;
$scenario_id =~ s/\..+//;
print "# Szenario_ID: $scenario_id\n";
open INFILE, "<", $input_directory.$file or die "Cannot open INFILE $file in $input_directory.\n";;
$cnt = 0;
$line = <INFILE>;
chomp $line;
while ($line = <INFILE>) {
if ($line =~ m/^\*/) { $cnt++; next; }
if ($line =~ m/^\s+/) { $cnt++; next; }
print OUTFILE "\"$scenario_id\",".$line;
}
close INFILE;
}
# close output file
close OUTFILE;
Last edited: 2014-12-19 09:48:40 +0100 (CET)