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;