Benutzer:Blech/wle tab

aus Wikipedia, der freien Enzyklopädie

Perl-Skript speichern als wle_tab.pl, Aufruf mit perl -w wle_tab.pl

push (@INC,".");
use strict;

my $tab_z = "NaturGeoDe.txt";	                   # Vorlage:NaturGeoTabelle_DE/Zeile in einer Datei
my $tab_p = "NaturGeoDe.param";                    # ausgegliederte Zeilen, Beispiel siehe unten
my $csv_liste = "hessen_lsg_arbeit_fertig2.csv";   # die Daten in einer csv-Datei
my $result_tab = "resultat.txt";                   # dorthin wird das Ergebnis geschrieben
my @elemente;

my $pflicht = "[\!]{8}";                           # Standard-Platzhalter bei Pflichtparametern

if (-f $csv_liste) 
{ 
  open (IH, $csv_liste) || die "Fehler beim Oeffnen der Ausgangsdaten-Datei: ".$csv_liste.": ".$!;
  open (RH, ">".$result_tab) || die "Fehler beim Oeffnen der Ergebnis-Datei: ".$result_tab.": ".$!;
 
  &kopf_fuss("kopf");                              # Tabellenkopf schreiben

  while (<IH>)
  {
    @elemente = split(/;/,$_);                     # erwartetes Trennzeichen ;
    chomp(@elemente);                              # überschüssige Leerzeichen weg
    my $zeige_block_abgehakt = 0;

    open (TZ, $tab_z) || die "Fehler beim Oeffnen der Tabellenzeile: ".$tab_z.": ".$!;
    while (<TZ>)
    { # Zuordnung der Elemente abhängig von Reihenfolge in der csv-Tabelle
      s/Typ=/Typ=LSG/;                             # fest eingebaut, bessere Lösung suchen
      s/\|Name=$pflicht/\|Name=$elemente[2]/;
      #s/\|Artikel=/\|Artikel=$elemente[7]/; 
      if ( /\|Artikel/ ) {next;}                   # Artikel funktioniert noch nicht
      s/\|ID=/\|ID=$elemente[0]/;
      s/WDPA=/WDPA=$elemente[1]/;
      s/Coordinate.NS=/Coordinate.NS=$elemente[5]/;
      s/Coordinate.EW=/Coordinate.EW=$elemente[4]/;
      s/\|Land=$pflicht/\|Land=HE/;                # fest eingebaut, bessere Lösung suchen
      $elemente[3] =~ s/,/./;                      # ändert Trennzeichen bei der Fläche von "," in "."
      s/Fläche=/Fläche=$elemente[3]/;
      s/Datum=/Datum=$elemente[6]/;
      s/\|Seite=$pflicht/\|Seite=Landschaftsschutzgebiete in Hessen/;  # fest eingebaut, bessere Lösung suchen

      if ( /\|Zeige/ ) 
      {
        if (1 == $zeige_block_abgehakt) {next;}
        &kopf_fuss("ist_nicht_schoen_ich_weiss");
        $zeige_block_abgehakt = 1;
	next;
      }
        
      print RH $_;       # in die Ergebnis-Datei schreiben
    }
    close(TZ);
  }
  close(IH);

  &kopf_fuss("fuss");    # Tabellenfuß schreiben

  close(RH);
}

sub kopf_fuss()
{
  open (PH, $tab_p) || die "Fehler beim Oeffnen der Parameter-Datei: ".$result_tab.": ".$!;
  while (<PH>)
  {
    if ($_[0] =~ /kopf/i)
    {
      if ( /\{\{NaturGeoTabelle DE\|Typ/ ) {print RH $_;}
    }
    elsif ($_[0] =~ /fuss/i )
    {
      if ( /\{\{NaturGeoTabelle DE\/Fuß\|Typ/ ) {print RH $_;}
    }
    if ( /\|Zeige/ ) {print RH $_;}
  }
  if ($_[0] =~ /kopf/i || $_[0] =~ /fuss/i) {print RH "\}\}\n";}
  
  close (PH);
}

Beispiel für NaturGeoDe.param:

{{NaturGeoTabelle DE|Typ=LSG

{{NaturGeoTabelle DE/Fuß|Typ=LSG

|ZeigeBild={{{ZeigeBild|1}}}
|ZeigeLand={{{ZeigeLand|0}}}
|ZeigeKreis={{{ZeigeKreis|0}}}
|ZeigeTyp={{{ZeigeTyp|0}}}
|ZeigeDetails={{{ZeigeDetails|1}}}
|ZeigeGeolog={{{ZeigeGeolog|0}}}
|ZeigeWLE={{{ZeigeWLE|2014}}}

Beispiel für csv-Datei mit Ausgangsdaten:

Nummer;WDPA;Name;Fläche (ha);Längengrad;Breitengrad;Datum;Artikel
2531003;378395;Am Gilderspfad;5,24;8.755938;50.519324 ;;
2632013;378733;An der Wolfsgrube bei Kerspenhausen;2,28;9.652659;50.804196;1967;
2634004;378397;Antrefftal;936,3;9.178817;50.851242;1972;