ANZEIGE
Falls jemand seine Flugstatistik.de Daten in Excel oder wer weiß wo importieren will, mag dieses Script hilfreich sein.
Ihr braucht noch pdftotext (Teil von Xpdf: Home), getestet unter Linux, sollte aber mit beliebigen Perl-Versionen funktionieren. Womöglich tun's auch andere Tools, die PDF-Dateien in Text konvertieren.
Ich selber nutze flugstatistik.de nicht.
Aufgrund der Daten im PDF wird die Airline als Klartext, nicht als IATA-Code ausgegeben. Falls Ihr eine Datenbank mit Airlines und IATA-Codes habt, könnt Ihr das ggf. mit etwas dem folgenden Skript ähnlichen nachbearbeiten:
Ihr braucht noch pdftotext (Teil von Xpdf: Home), getestet unter Linux, sollte aber mit beliebigen Perl-Versionen funktionieren. Womöglich tun's auch andere Tools, die PDF-Dateien in Text konvertieren.
Ich selber nutze flugstatistik.de nicht.
Code:
#!/usr/bin/perl
#
# flugstatistik2csv.pl
#
# Konvertiert aus flugstatistik.de exportierte PDF Daten
# (siehe "Druckansicht") in CSV.
#
# Der Autor übernimmt keine Garantie für Funktionsfähigkeit,
# ebensowenig dafür, dass die Benutzung des Tools mit den
# Nutzungsbestimmungen von flugstatistik.de kompatibel ist.
#
# Lizenz: GPL <http://www.gnu.org/licenses/gpl.html>
#
# Braucht pdftotext, getestet mit Version 3.00
#
# Benutzung:
#
# $ pdftotext -raw -nopgbrk HeruntergeladeneDatei.pdf flugdaten.raw
# $ flugstatistik2csv.pl < flugdaten.raw > flugdaten.csv
#
print "id;date;from;to;airline;cabin;reason;seat\n";
$id = 0;
while (<STDIN>) {
chomp;
if (/^([0-9]+) (([0-9]{2}\.)([0-9]{2}\.))?([0-9]{4}) ?([A-Z]{3})?/) { # HEADER - nr. datum
if ($id) {
print "$id;$datum;$from;$to;$airline;$class;$reason;$seat\n";
}
$id = "$1";
if ($2) {
$datum = "$5-".substr($4,0,2)."-".substr($3,0,2);
} else {
$datum = "$5-01-01";
}
$from = $6;
$to = "";
$airline = "";
$reason = "";
$class = "";
$seat = "";
$isAirline = 0;
}
elsif (/(gesch.ftlich|privat|Economy|Business|First|Gang|Fenster)/) {
$isAirline = 0;
if (/gesch.ftlich/) { $reason = "B"; }
if (/privat/) { $reason = "P"; }
if (/Economy/) { $class = "Y"; }
if (/Business/) { $class = "C"; }
if (/First/) { $class = "F"; }
if (/Gang/) { $seat = "A"; }
if (/Fenster/) { $seat = "W"; }
}
elsif ($isAirline) {
$airline .= $_ . " ";
}
elsif (/^([A-Z]{3})/) {
if ($from) {
$to = $1;
} else {
$from = $1;
}
}
elsif (/^[0-9]+\:[0-9]+ h/) {
$isAirline = 1;
}
}
Aufgrund der Daten im PDF wird die Airline als Klartext, nicht als IATA-Code ausgegeben. Falls Ihr eine Datenbank mit Airlines und IATA-Codes habt, könnt Ihr das ggf. mit etwas dem folgenden Skript ähnlichen nachbearbeiten:
Code:
#!/usr/bin/perl
use strict;
use DBI();
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=flights;host=localhost",
"***", "***", {'RaiseError' => 1});
open(IN, "***.csv");
while (<IN>) {
chomp;
my ($oldid,$date,$dep,$arr,$airline,$class,$reason,$seat) = split(/\;/);
$airline =~ s/\s+$//;
my $airlinecode = 0;
my $sth = $dbh->prepare("SELECT code,name,MATCH(name) AGAINST ('$airline') AS count
FROM airline HAVING count > 0 ORDER BY count DESC LIMIT 1");
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
$airlinecode = $ref->{'code'};
}
$sth->finish();
unless ($airlinecode) {
print "Airline \"$airline\" not found - please enter code: ";
chomp($airlinecode = <STDIN>);
}
$dbh->do("INSERT INTO flight (uid,date,dep,arr,airline,cabin,reason) VALUES
( '2', '$date', '$dep', '$arr', '$airlinecode', '$class', '$reason' )");
}
$dbh->disconnect();