Hallo,
brauch mal wieder nen kleinen Anhaltspunkt damit ich weiter komme.
Problem: Ich habe eine Datei die ich Zeilenweise auslese. In der Datei gibt es Zeilen die mit # beginnen. Sobald eine solche Zeile kommt, muss das Script wissen das es sich um einen neuen Artikel handelt. Nach dieser Zeile kommen noch x beliebig viel andere Zeilen. Von einigen Zeilen brauche ich dann verschiedene Informationen die ich mittels if Anweisung suche und dann in Variablen zwischenspeichere.
Bevor jetzt eine neue Zeile mit einem # kommt, sollen alle Variablen mittels ; getrennt in einem Array gespeichert werden.
Da das Perlscript ja von oben nach unten ausgeführt wird habe ich entsprechend die Reihenfolge der if Anweisungen geschrieben. Das ganze funktioniert auch soweit. Lediglich der erst Suchstring findet er zwar, speichert diese aber in einer seperaten Zeile.
Um das ganze zu verdeutlichen hier mal nen bissel 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl
use warnings;
use strict;
my $path = "/ist/egal";
my $infile = "input.txt";
my $outfile = "output.csv";
my $found = "";
my $count = "";
my @Dealer = ();
my $firstNR = "";
my $secNR = "";
my $thirdNR = "";
open(IN, "<$path/$infile") || die "Cannot open file $infile!\n";
while(<IN>) {
chomp;
my $line = $_;
if($line =~ /^(# suchmuster1)(\d+)(suchmuster2)/)
{
$firstNR = $2;
$found = 2;
}
elsif($line =~ /^(suchmuster3)(.+)/)
{
$secNR = $2;
}
elsif($line =~ /^(suchmuster4)(test)/i)
{
$thirdNR = $2;
}
if($found eq "2")
{
my $new_line = $firstNR.";".$secNR.";".$thirdNR.";";
push(@Dealer, $new_line);
$found = "";
$firstNR = "";
$secNR = "";
}
}
close(IN);
open(OUT, ">>$path/$outfile") || die "Cannot open and write file $outfile!\n";
foreach my $zeile (@Dealer)
{
print OUT $zeile."\n";
$count++;
}
close(OUT);
print "Habe $count Datensaetze gefunden\n";
Vielleicht habt ihr ja nen Verbesserungsvorschlag.
Gruß