Thread Probleme mit Ausdrücken (21 answers)
Opened by Trommelwirbel at 2011-11-10 17:05

topeg
 2011-11-14 18:17
#154192 #154192
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich weiß nicht ob ich dich korrekt verstanden habe.

Du hast eine Datei "elemente.txt" in der sind Standortdaten gespeichert. Eine Standort beginnt mit einer Zahl gefolgt von (nicht näher spezifizierten) unbestimmten Anzahl von Zeilen
Du hast eine Datei "hq_regio_neu.txt" Die entspricht diesem Format:
more (723b):
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
18 5
2 1.35
5 3.25
10 5.4
25 9.63
50 14.3
19 5
2 1.53
5 3.65
10 6.04
25 10.71
50 15.84
21 5
2 1.72
5 4.1
10 6.82
25 12.28
50 18.4
29 5
2 0.7
5 1.87
10 3.4
25 6.89
50 11.3
33 5
2 0.91
5 2.39
10 4.31

Darin Spezifiziert ist eine Region zusammen mit einer Angabe von Zeilen. das Format dieser Speziellen Angabe ist:
Code: (dl )
<Integer Zahl><Leerzeichen><Integer Zahl>
.

Nun willst du alle Regionsangaben aus "hq_regio_neu.txt" lesen und die entsprechende Anzahl von Zeilen des Blocks der Region aus "elemente.txt" lesen und in eine separate Datei schreiben.

Ist das soweit Korrekt?

Wenn ja würde ich es so implementieren:

more (10.9kb):
Code (perl): (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/perl
use strict;
use warnings;

my $elemente_file='elemente.txt';
my $region_file='hq_regio_neu.txt';

#-----------------------------------------------------------------------
# Laden der Elemente
# ein Element ist eine Zahl getrenn von einem Leerzeigen und noch einer Zahl
# In keinen der zahlen darf ein "." vorkommen

# alle gefunden Elemente in einen hash
# der zweite Parameter ist als Wert der erste als Schlüssel
my %elemente;
open(my $elemente_fh, '<', $elemente_file) or die ("ERROR open $elemente_file ($!)\n");
while(my $line=<$elemente_fh>)
{
  chomp($line);
  $elemente{$1}=$2 if($line=~/^(\d+)\s+(\d+)/)
}
close($elemente_fh);

# öffe das zu durchsuchende Dokument
# Der Schlüsselpunkt ist eine Zeile die mit einer Zahl beginnt
open(my $in_fh, '<', $region_file) or die ("ERROR open $elemente_file ($!)\n");

# Anzahl der Zeilen, die in die neue Datei gescchrieben werden sollen.
my $count=0;
# Das FileHandle der neuen Datei
my $out_fh=undef;

# Alle Zeilen lesen
while(my $line=<$in_fh>)
{
  # wenn eine Zeile eine Zahl ist
  if($line=~/^(\d+)/)
  {
    my $name=$1;

    # gibt es diese Zahl im Hash?
    if(exists($elemente{$name}))
    {
      # Datei öffnen

      if(open($out_fh, '>', "$name.out.txt"))
      {
        # Den Zähler für die nächsten Zeilen setzen
        $count=$elemente{$name};
      }
      else
      {
        # Warnung wenn die Datei nicht geöffnet werden konnte
        warn("WARNING error opnen $name.txt ($!)\n");
        $out_fh=undef;
      }
    }
  }
  # wenn die datei geöffnet und Noch zeilen zu schreiben sind
  # dann schreibe die Zeile in die datei und erniedrige den Zähler
  elsif($count>0 && defined($out_fh))
  {
    print $out_fh $line;
    $count--;
  }

}
close($in_fh);

Last edited: 2011-11-14 18:18:22 +0100 (CET)

View full thread Probleme mit Ausdrücken