Thread ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern (20 answers)
Opened by Thyrius at 2014-07-15 21:55

Thyrius
 2014-07-17 15:31
#176486 #176486
User since
2013-01-23
42 Artikel
BenutzerIn

user image
So, nach einigem hin und her habe ich mit der Ausgabe der Textdatei doch so meine Probleme.

Denn, nachdem das Progi pdftotext.exe die Umwandlung vollzogen hat, sind sämtliche gebrauchten Daten Leerzeichen getrennt.

Wären alle Adressen im selben Aufbau, so wäre ich bereits fertig.
Da aber teilweise Strassennamen mit mehreren Wörtern auch Leerzeichen getrennt sind, oder Firmennamen ebenfalls mit Leerzeichen geschrieben werden, kann man sich vorstellen, welches Durcheinander das bei über 1200 Datensätzen gibt.
I-Punkt setzen dann die Doktoren in den Datensätzen, die teilweise mit mehreren Kürzeln "daherprahlen".

Nachdem ich mir das File pdftotext genauer angesehen habe, habe ich herausgefunden, dass mit dem richtigen Parameter die Ausgabe so ausgegeben werden kann, dass die Adresse nicht in einer Zeile steht, sondern wie es sich gehört, untereinander.

Beispiel-Ergebnis der Umwandlung ohne extra Parameter (wie im Code benutzt)

Quote
Herr Willi Mustermann 1-Strasse 7 12345 Musterstadt

oder
Quote
Frau Dr. med. dent Willhelmine Musterfrau In der Stadt 7 b 3456 Weil am Rhein


Wünschenswert wäre gewesen:

Quote
Herr;;;;Willi;Mustermann;1-Strasse;7;;12345;Musterstadt;

oder
Quote
Frau;Dr.;med.;dent;Willhelmine;Musterfrau;In der Stadt;7;b;3456;Weil am Rhein;


Das kann meines Wissens aber nicht funktionieren, wenn pdftotext das nicht hergibt.

So, wie gesagt, habe mir das Programm genauer angesehen und einen Schalter gefunden, der mir die Adresse wie folgt ausgibt:

Quote
Firmenname¶
Kontaktmöglichkeiten¶
Deutscher Industrie und Handelskammertag (DIHK)¶
Strasse Gesellschaft Ort und Telefon¶
Hier noch was¶
da noch was¶
noch was, was nicht interessiert¶
Adresse der Firma¶
Vom Briefkopf rechts Zeile 1¶
Vom Briefkopf rechts Zeile 2¶
Vom Briefkopf rechts Zeile 3¶
Vom Briefkopf rechts Zeile 4¶
Absendername und -Adresse im Kuvertfenster¶
66663 Merzig¶
Herrn¶
Willi Mustermann¶
1-Strasse 7¶
12345 Musterstadt¶


Die Daten, die ich brauche, fangen also immer bei Zeile 15 an (Fettgedruckt)

Doof, wenn ich ne Zeile mehr habe, wie hier:

Quote
Firmenname¶
Kontaktmöglichkeiten¶
Deutscher Industrie und Handelskammertag (DIHK)¶
Strasse Gesellschaft Ort und Telefon¶
Hier noch was¶
da noch was¶
noch was, was nicht interessiert¶
Adresse der Firma¶
Vom Briefkopf rechts Zeile 1¶
Vom Briefkopf rechts Zeile 2¶
Vom Briefkopf rechts Zeile 3¶
Vom Briefkopf rechts Zeile 4¶
Absendername und -Adresse im Kuvertfenster¶
66663 Merzig¶
Herrn¶
Willi Mustermann¶
c/o Wilhelmine Musterfrau¶
1-Strasse 7¶
12345 Musterstadt¶


Die nächste Zeile, die immer, also bei jeder Datei folgt, ist dieser Eintrag:
Code: (dl )
Telefon: 0176123456789

weil diese auch im Briefkopf rechts steht, quasi als Zeile 5. Dieser Eintrag ist also immer gleich!

Wie kann ich nun meinem Perl-Scribt sagen, es soll nicht die Zeile 2 lesen, sondern lesen ab Zeile 15 bis eine Zeile anfängt mit "Telefon: 0176123456789" ???

Sorry, wenn ich die Community wieder bemühen muss... :(
Ich hänge hier seit gestern morgen mit rum, und bekomme es nicht hin...

Danke


hier nochmal der bisherige Code, damit ihr nicht suchen müsst (mit neuem Parameter für pdftotxt.exe):

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

my $outfile = 'Adressen.txt';

open my $OUTH, '>>', $outfile or die "open($outfile, w+) failed: $!";

for my $i ( 1 .. 1250 ) {

my $pdffile = sprintf "%01d.pdf", $i;
my $txtfile = sprintf "%01d.txt", $i;

my $prog = "pdftotext.exe -f 1 -raw $pdffile $txtfile";
system( $prog ) == 0 or next; # bei Fehler weiter mit der nächsten Datei

open my $INH, '<', $txtfile or die "open($txtfile,ro) failed: $!";
( undef, my $address ) = <$INH>; # zweimal lesen; erste "Zeile" ignorieren
print $OUTH $address;
close $INH;
}

close $OUTH or die "close($outfile) failed: $!";
Alter Mann ist kein D-Zug... :D

View full thread ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern