Thread Kleines Problem beim auslesen einer Datei: Stehe gerade auf dem Schlau :( (9 answers)
Opened by krusty at 2007-02-28 12:56

krusty
 2007-02-28 12:56
#74674 #74674
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
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.

Code: (dl )
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ß

View full thread Kleines Problem beim auslesen einer Datei: Stehe gerade auf dem Schlau :(