[Allegro] im vorfeld den/das längster datensatz/längstes feld ermitteln?

Michael Lackhoff michael at lackhoff.de
So Mai 26 07:54:12 CEST 2013


On 25.05.2013 21:22 Klaus Lehmann wrote:

> aber wie es im vorfeld erkennen? herrn bergers einzeiler hat nicht 
> wirklich was gebracht. ich verstehe auch die ministruktur des 
> einzeilers nicht. aber bin ja auch kein "perl-monk" ;-)

Ich habe den Einzeiler mal mit einer kleinen Abwandlung bei mir
durchlaufen lassen:

perl -n -e "$/=qq(\x00); warn $_ . length if length > 500" TRENN.ALG

d.h. Aendere den Trenner auf ASCII 0 (\x00), da Sie ja lange Felder und
nicht lange Datensaetze haben wollen. Standardmaessig ist der
Zeilenumbruch der Trenner, deshalb braucht der Einzeiler von Herrn
Berger keine solche Angabe.
Gib dann das Feld und dessen Laenge aus, wenn die Laenge groesser 500
Zeichen ist.
Dabei kommt z.B. sowas raus:

81 Vorg. ----> Verein von Altertumsfreunden im Rheinlande: Jahrbücher
des Vereins von Alterthumsfreunden im Rheinlande * Beil. u. darin
aufgeg. ----> Provinzialmuseum <Bonn>: Berichte der Provinzialmuseen zu
Bonn und Trier * Forts. ----> Verein von Altertumsfreunden im
Rheinlande: Bonner Jahrbücher des Vereins von Altertumsfreunden im
Rheinlande und des Rheinischen Provinzialmuseums in Bonn * Darin ---->
Provinzialmuseum <Trier>: Jahresbericht des Provinzialmuseums zu Trier *
Beil. ----> Römisch-germanisches Korrespondenzblatt * 100.1896 -
117.1908 darin u. ab 118.1909 Beil. ----> Rheinprovinz /
Provinzialkommission für Denkmalpflege: Berichte über die Tätigkeit der
Provinzialkommission für die Denkmalpflege in der Rheinprovinz und der
Provinzialmuseen zu Bonn und Trier * 1896 - 1908 darin ----> Berichte
über die Tätigkeit der Altertums- und Geschichtsvereine und über die
Vermehrung der kirchlichen, städtischen und Vereinssammlungen innerhalb
der Rheinprovinz 974 at -e line 1, <> chunk 725326.

D.h. es gibt da irgendwo (im insgesamt 725326. Feld, was nicht wirklich
weiterhilft) ein Feld, das 974 Zeichen lang ist, die Kategorienummer
'81' hat und den angegebenen Text enthaelt.

Hier eine kleine Abwandlung, die den ganzen Satz ausgibt, wenn irgendein
Feld darin laenger als 500 Zeichen ist:

perl -n -e "warn $_ if grep {length > 500} split /\x00/" TRENN.ALG

Oder mit Ausgabe der Laenge des zu langen Feldes:

perl -n -e "warn $l . ': ' . $_ if grep {length > 500 && ($l = length)}
split /\x00/" TRENN.ALG

Alles ausprobiert unter Windows 7 mit Perl 5.16.2.
Unter Linux muessen Sie vermutlich einfache Anfuehrungszeichen statt der
doppelten nehmen, da sonst die shell den Inhalt interpretiert.

Viele Gruesse
Michael Lackhoff

p.s.: Genaugenommen muesste man bei der ersten Loesung noch 1 fuer den
Trenner abziehen, der mitgezaehlt wird, waehrend 'split' nur den Inhalt
_zwischen_ den Trennern zurueckgibt aber ich denke das ist in
Zusammenhang Ihres Problems vernachlaessigbar.




Mehr Informationen über die Mailingliste Allegro