Schrift
[thread]12386[/thread]

einlesen bearbeiten und ausgeben (Seite 6)

Leser: 6


<< |< 1 ... 3 4 5 6 7 8 >| >> 73 Einträge, 8 Seiten
Gast Gast
 2008-08-22 12:17
#113885 #113885
So würde ich es schreiben:

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
#! usr/bin/perl
use strict;
use warnings;

my %hash;
$hash{AL}="052001";
$hash{AB}="052003";
$hash{HX}="052363";
$hash{BRE}="052324";

if(@ARGV<2)
{ die "Bitte wie folgt aufrufen:\n   $0 <Eingabedatei> <Ausgebedatei>\n"; }

my $eingabe_datei=$ARGV[0];
my $ausgabe_datei=$ARGV[1];

# Eingabedatei öffnen
open( my $rein, '<', $eingebe_datei) or die "Konnte $eingabe_datei nicht oeffnen ($!)\n";

# Ausgabedatei öffnen
open( my $raus, '>', $ausgabe_datei) or die "Konnte $ausgabe_datei nicht oeffnen ($!)\n";

#schleife
while(my $zeile= <$rein>)
{ # Eingabedatei zeilenweise lesen
  # \n entfernen 
  # (chop entfernt das letzte Zeichen,
  # das muss aber nicht \n sein...)
  chomp($zeile);
  my @array=split($zeile);
  # $array[0]: Gemarkungsbezeichnung 
  # $array[1]: "FL"
  # $array[2]: Flur nummer 
  # $array[3]: "NR" 
  # $array[4]: Flurstücksnummer (z.B. 42 oder 260/285)

  my $Gemarkungsnummer=$hash{$array[0]};
  my $Flurnummer=$array[2]; 
  my $Flurstuecksnummer=$array[4]; # aufsplitten in Zaehler und Nenner
  my ($Flurstuecksnummerzaehler,$Flurstuecksnummernenner)=split ("/",$Flurstuecksnummer); # aufsplitten Zaehler und Nenner


  #tausche "+" durch "+0"
  $array[2] =~ s/\+/+0/g;

  #abfrage ob im String "NR" vorkommt
  if($array[4] ne "NR")
  {
    # print "$zeile     $hash{$array[0]}-0$array[2]-$nullen$array[4]/000.00 $array[5] $array[6] $array[7]\n";
    printf $raus "%s\t%s-%03u-%05u/%03u.00\t \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, $Flurstuecksnummernenner;
  }
  else
  {
    #print "$zeile     $hash{$array[0]}-0$array[2]\n";
    printf $raus "%s\t%s-%03u \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, 
  }
        #print "$zeile\n";
}

close($raus);
close($rein);
havi
 2008-08-22 12:25
#113886 #113886
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
renee+2008-08-22 09:04:07--
havi: Du öffnest die Datei zum Lesen, nicht zum Schreiben...


oh, sorry - vertippt.
havi
 2008-08-22 12:26
#113887 #113887
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-08-22 09:29:25--
open(my $fhFertig, "<Fertig.txt") or die $!;

while(<>) {

print $fhFertig $_;

} # while

close($fhFertig) or die $!;
[/perl]


Dies war ein Beispiel... leider hab ich mich vertippt. > waere richtig.
Gast Gast
 2008-08-22 12:39
#113888 #113888
jetzt komme ich ganricht mehr mit:(

ich möchte das hinten hinter das UA angezeigt wird und habe nisher nix geändert es sieht so bei mirmomentan noch aus:
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
$hash{AL}="052001";
$hash{AB}="052003";
$hash{HX}="052363";
$hash{BRE}="052324";
#Um switch anweisung zu benutzen
use Switch;
# Eingabedatei öffnen
# Ausgabedatei-normalfälle öffnen
# Ausgabedatei-sonderfälle öffnen



#schleife
while(<>){ # Eingabedatei zeilenweise lesen
  chop;
  $org=$_;
  @array=split;
# $array[0]: Gemarkungsbezeichnung (z.B. AL)
# $array[1]: "FL"
# $array[2]: Flur nummer (z.B. 14)
# $array[3]: "NR" 
# $array[4]: Flurstücksnummer (z.B. 42 oder 260/285)

  $Gemarkungsnummer=$hash{$array[0]};
  $Flurnummer=$array[2]; 
  $Flurstuecksnummer=$array[4]; # aufsplitten in Zaehler und Nenner
  ($Flurstuecksnummerzaehler,$Flurstuecksnummernenner)=split ("/",$Flurstuecksnummer); # aufsplitten in Zaehler und Nenner




  #schaut ob im string ein "+" vorkommt, wenn ja wird das "+" durch "+0" getauscht
  if ($array[2] =~ "\\+"){
    $array[2] =~ s/\+/\+0/;
  }

  #abfrage ob im String "NR" vorkommt
  if($array[4] != "NR")
  {
  # print "$_     $hash{$array[0]}-0$array[2]-$nullen$array[4]/000.00 $array[5] $array[6] $array[7]\n";
  printf "%s\t%s-%03u-%05u/%03u.00\t \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, $Flurstuecksnummernenner;
  }
  else
  {
  #print "$_     $hash{$array[0]}-0$array[2]\n";
  printf "%s\t%s-%03u \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, 
  }
        #print "$_\n";
}



wie mache ich das mit dem UA jetzt? muss das alles ancheinander machen sonst steig ich nicht durch sorry! danke für jede hilfe!
Gast Gast
 2008-08-22 13:10
#113889 #113889
Schau mal in Beitrag 49
Gast Gast
 2008-08-22 13:32
#113890 #113890
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
$hash{AL}="052001";
$hash{AB}="052003";
$hash{HX}="052363";
$hash{BRE}="052324";
#Um switch anweisung zu benutzen
#use Switch;
# Eingabedatei öffnen
# Ausgabedatei-normalfälle öffnen
# Ausgabedatei-sonderfälle öffnen

open(EINGABEDATEI,"$ARGV[0]") 
open(AUSGABEDATEI,"$ARGV[1]") 
open(FEHLERDATEI,"$ARGV[2]")

#schleife
while(EINGABEDATEI){ # Eingabedatei zeilenweise lesen
chop;
$org=$_;
@array=split;
# $array[0]: Gemarkungsbezeichnung (z.B. AL)
# $array[1]: "FL"
# $array[2]: Flur nummer (z.B. 14)
# $array[3]: "NR" 
# $array[4]: Flurstücksnummer (z.B. 42 oder 260/285)

$Gemarkungsnummer=$hash{$array[0]};
$Flurnummer=$array[2]; 
$Flurstuecksnummer=$array[4]; # aufsplitten in Zaehler und Nenner
($Flurstuecksnummerzaehler,$Flurstuecksnummernenner)=split ("/",$Flurstuecksnummer); # aufsplitten in Zaehler und Nenner



#schaut ob im string ein "+" vorkommt, wenn ja wird das "+" durch "+0" getauscht
if ($array[2] =~ "\\+"){
$array[2] =~ s/\+/\+0/;
}

#abfrage ob im String "NR" vorkommt
if($array[4] != "NR")
{
# print "$_     $hash{$array[0]}-0$array[2]-$nullen$array[4]/000.00 $array[5] $array[6] $array[7]\n";
printf AUSGABEDATEI "%s\t%s-%03u-%05u/%03u.00\t \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, $Flurstuecksnummernenner;
}
else
{
#print "$_     $hash{$array[0]}-0$array[2]\n";
printf FEHLERDATEI "%s\t%s-%03u \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, 
}
        #print "$_\n";



}

close(EINGABEDATEI);


kann mir jemand sagen wo hier der fehler beim speichern liegt?
renee
 2008-08-22 13:47
#113892 #113892
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du öffnest die Dateien nur zum Lesen!

Zum Schreiben öffnet man eine Datei so: open(AUSGABEDATEI,'>',$ARGV[1]) or die $!;

Dann hast Du noch überall das Semikolon vergessen, die Fehlerbehandlung hast Du auch weggelassen.

Im Schleifenkopf der while-Schleife muss es <EINGABEDATEI> heißen.

Statt chop solltest Du chomp verwenden.

Du solltest mit Wiki:use strict arbeiten.

Etwas Schreibarbeit kannst Du Dir auch sparen, indem Du aus
Code (perl): (dl )
1
2
3
4
$hash{AL}="052001";
$hash{AB}="052003";
$hash{HX}="052363";
$hash{BRE}="052324";
das hier machst:
Code (perl): (dl )
1
2
3
4
5
6
 my %hash = (
  AL => '052001',
  AB => '052003',
  HX => '052363',
  BRE => '052324',
);


Und bitte verwende das nächste Mal die perl- oder code-Tags...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2008-08-22 14:08
#113893 #113893
Hab dir dein Skript mal angepasst!

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
#!/usr/bin/perl

use warnings;;
use strict;

my %hash = (
   AL => '052001',
   AB => '052003',
   HX => '052363',
   BRE => '052324',
);
# Eingabedatei öffnen
# Ausgabedatei-normalfälle öffnen
# Ausgabedatei-sonderfälle öffnen

open(my $eingabeDatei, "<$ARGV[0]") or die $!;
open(my $ausgabeDatei, ">$ARGV[1]") or die $!;
open(my $fehlerDatei,  ">$ARGV[2]") or die $!;

#schleife
while(my $zeile = <$eingabeDatei>){ # Eingabedatei zeilenweise lesen
   chomp $zeile;
   my $org=$zeile;
   my @array=split(/ /, $zeile);
   # $array[0]: Gemarkungsbezeichnung (z.B. AL)
   # $array[1]: "FL"
   # $array[2]: Flur nummer (z.B. 14)
   # $array[3]: "NR" 
   # $array[4]: Flurstücksnummer (z.B. 42 oder 260/285)
   
   my $Gemarkungsnummer=$hash{$array[0]};
   my $Flurnummer=$array[2]; 
   my $Flurstuecksnummer=$array[4]; # aufsplitten in Zaehler und Nenner
   my ($Flurstuecksnummerzaehler,$Flurstuecksnummernenner)=split (/\//,$Flurstuecksnummer); # aufsplitten in Zaehler und Nenner
   
   
   
   #schaut ob im string ein "+" vorkommt, wenn ja wird das "+" durch "+0" getauscht
   if ($array[2] =~ "\\+"){
      $array[2] =~ s/\+/\+0/;
   }
   
   #abfrage ob im String "NR" vorkommt
   if($array[4] != "NR")
   {
      # print "$_     $hash{$array[0]}-0$array[2]-$nullen$array[4]/000.00 $array[5] $array[6] $array[7]\n";
      printf $ausgabeDatei "%s\t%s-%03u-%05u/%03u.00\t \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, $Flurstuecksnummernenner;
   }
   else
   {
      #print "$_     $hash{$array[0]}-0$array[2]\n";
      printf $fehlerDatei "%s\t%s-%03u \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, 
   }
           #print "$_\n";



}

close($eingabeDatei) or die $!;
close($ausgabeDatei) or die $!;
close($fehlerDatei)  or die $!;


... und bitte auch immer alle Dateien auch wieder schliessen.
havi
 2008-08-22 14:09
#113894 #113894
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Gast+2008-08-22 12:08:27--
Hab dir dein Skript mal angepasst!

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
#!/usr/bin/perl

use warnings;;
use strict;

my %hash = (
   AL => '052001',
   AB => '052003',
   HX => '052363',
   BRE => '052324',
);
# Eingabedatei öffnen
# Ausgabedatei-normalfälle öffnen
# Ausgabedatei-sonderfälle öffnen

open(my $eingabeDatei, "<$ARGV[0]") or die $!;
open(my $ausgabeDatei, ">$ARGV[1]") or die $!;
open(my $fehlerDatei,  ">$ARGV[2]") or die $!;

#schleife
while(my $zeile = <$eingabeDatei>){ # Eingabedatei zeilenweise lesen
   chomp $zeile;
   my $org=$zeile;
   my @array=split(/ /, $zeile);
   # $array[0]: Gemarkungsbezeichnung (z.B. AL)
   # $array[1]: "FL"
   # $array[2]: Flur nummer (z.B. 14)
   # $array[3]: "NR" 
   # $array[4]: Flurstücksnummer (z.B. 42 oder 260/285)
   
   my $Gemarkungsnummer=$hash{$array[0]};
   my $Flurnummer=$array[2]; 
   my $Flurstuecksnummer=$array[4]; # aufsplitten in Zaehler und Nenner
   my ($Flurstuecksnummerzaehler,$Flurstuecksnummernenner)=split (/\//,$Flurstuecksnummer); # aufsplitten in Zaehler und Nenner
   
   
   
   #schaut ob im string ein "+" vorkommt, wenn ja wird das "+" durch "+0" getauscht
   if ($array[2] =~ "\\+"){
      $array[2] =~ s/\+/\+0/;
   }
   
   #abfrage ob im String "NR" vorkommt
   if($array[4] != "NR")
   {
      # print "$_     $hash{$array[0]}-0$array[2]-$nullen$array[4]/000.00 $array[5] $array[6] $array[7]\n";
      printf $ausgabeDatei "%s\t%s-%03u-%05u/%03u.00\t \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, $Flurstuecksnummernenner;
   }
   else
   {
      #print "$_     $hash{$array[0]}-0$array[2]\n";
      printf $fehlerDatei "%s\t%s-%03u \n", $org, $Gemarkungsnummer, $Flurnummer, $Flurstuecksnummerzaehler, 
   }
           #print "$_\n";



}

close($eingabeDatei) or die $!;
close($ausgabeDatei) or die $!;
close($fehlerDatei)  or die $!;


... und bitte auch immer alle Dateien auch wieder schliessen.



ich wars... vergessen einzuloggen! ;)
Gast Gast
 2008-08-22 14:59
#113896 #113896
Ich will mich mal vorsichtig Ausdrücken... wurde in diesem Thread schon mal diskutiert ob es sich um einen Troll handeln könnte?
<< |< 1 ... 3 4 5 6 7 8 >| >> 73 Einträge, 8 Seiten



View all threads created 2008-08-21 12:29.