Thread Text-Datei in mehrere Dateien splitten (21 answers)
Opened by hybi at 2013-07-23 11:07

Gast hybi
 2013-07-26 14:17
#169153 #169153
Klasse, hat geklappt, vielen Dank!

Letzte Baustelle:
Die Zeile Schlagworte soll ebenfalls noch gesplittet werden, dort werden die Schlagworte durch ein Komma getrennt.
Beispiel, aus:

Schlagworte [ Diskriminierung, Lieferverweigerung, Marktbeherrschendes Unternehmen ]

soll

Schlagwort 1 [ Diskriminierung ]
Schlagwort 2 [ Lieferverweigerung ]
Schlagwort 3 [ Marktbeherrschendes Unternehmen ]


werden.

Hier nochmal das gesamte Script mit renee's update:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl
use warnings;
use strict;

my $i = 0;
my $split = '@@';

open IN, 'wuw_gesamt.txt' or die "ERROR!\n";
open OUT, '> Dateien/wuw0.txt' or die "ERROR!\n";

while (<IN>)
{
        #Die Zeile "Jahrgang, Seite" in "Jahrgang" und "Seite" trennen
        if (m/^Jahrgang, Seite\s*\[\s*(\d{4}),\s+(\d+)\s\]\s*$/){ 
            print OUT "Jahrgang         [ $1 ]\nSeite            [ $2 ]\n";
        }
        
        #Die Zeile "Datum/Aktenz." in "Datum" und "Aktenzeichen" trennen
        elsif (m/^Datum.Aktenz.\s*\[\s*(\d*).(\d*).(\d{4})\s(.*)/){
            print OUT "Tag              [ $1 ]\nMonat            [ $2 ]\nJahr             [ $3 ]\nAktenzeichen     [$4 \n";
        }
        
        #Die Zeile "Abteilung" in "Abteilung" und "Abteilungsnummer" trennen
        elsif (m/^Abteilung\s*\[\s*(.*)\s(\d*)\s\]\s(.*)$/){
            print OUT "Abteilung        [ $1 ]\nAbteilungsnummer [ $2 ] \n";
        }
                
        #Zeilen, die nicht getrennt werden wie bisher ausgeben
        else{
            print OUT $_;
        }
                
        #An der Stelle "@@" die einzelnen Einträge trennen
        if (/^(.*?)$split(.*)$/){
            close OUT;
            $i++;
            open OUT, '> Dateien/wuw' . $i . '.txt' or die "ERROR!\n";
            print OUT $2;
        }     
}

close IN;
print "\n$i Dateien wurden erfolgreich erstellt.\n";


Jetzt hab ich versucht es ähnlich wie bisher handzuhaben (bspw. für Einträge mit 2 Schlagwörtern):

Code: (dl )
1
2
3
elsif (m/^Schlagworte\s*\[\s*(.*),\s(.*)$/){
print OUT "Schlagwort 1 [ $1 ]\nSchlagwort 2 [ $2 ] \n";
}


Nun gibt es natürlich ein oder etliche Schlagwörter pro Eintrag. Wie könnte man das am elegantesten und effiziensten lösen?
Last edited: 2013-07-26 14:20:43 +0200 (CEST)

View full thread Text-Datei in mehrere Dateien splitten