Perl Strings suchen und beibehalten

eXactA!m

Lt. Junior Grade
Registriert
Feb. 2006
Beiträge
432
Hallo Leute,

ich muss erstmal vorweg nehmen, dass ich kompletter Perl-Neuling bin. Das Script was ich benötige muss aber zwingend in Perl geschrieben werden (Der IT-Mensch in unserer Firma erlaubt auf dem Server nur Perl als Scriptsprache :() daher hoffe ich einmal auf eure Unterstützung :)

Nun zum eigentlichen Problem. Ich habe ein url.txt in der zigtausend Einträge in folgender Form enthalten sind.

Code:
Name: [Peter Meier]
Andresse: [Meierstr. 12, 66666 Meierstadt]
Telefon: [0190 777777]

Ich brauche als Endprodukt NUR die PLZ und den Ort, und das dann auch einzeilig, also quasi so:

Code:
66666 Meierstadt
77777 Hamburg
88888 Berlin
99999 München

Doppelte Einträge sind vorhanden und sollen auch so übernommen werden.
Die eckigen Klammern sind so in der Ausgangsdatei drin und können notfalls ja mit nem Texteditor ersetzt werden, jedoch sollte wenn möglich alles in einem Rutsch in Perl durchlaufen.

Ich kann mir vorstellen, dass der Ansatz dahingeht, dass nach "Adresse*," gesucht wird. Anschließend alles bis zur nächsten eckigen Klammer als neuer String gesetzt wird und dann weiter zum nächsten Eintrag.
...soweit die Theorie, nur bei der Umsetzung in Perl bauche ich eure Hilfe ;)

Danke schonmal
 
Mal auf die schnelle würde ich folgendes machen:
Code:
#!/usr/bin/perl

# Datei zum Einlesen öffen
open my $input, '<', 'url.txt' or die $!;

# Datei zum Ausgeben öffnen
open my $output, '>', 'output.txt' or die $!;

# Datei zeilenweise einlesen
while (my $line = <$input>) {
	# Prüfen ob die aktuelle Zeile mit 'Adresse anfängt'
	if ($line =~ /^Andresse/) {
		# Zeile splitten und im Array abspeichern 
		my @strings = split(',\s|\]',$line);
		# Array durchgehen und alle was nicht mit 'Adresse' anfängt in die output Datei schreiben
		foreach my $s (@strings) {
			print $output "$s" if(!($s =~ /^Andresse/));
		}
	}
}

# alle Dateien schliessen
close $output;
close $input;
exit;
Vorausgesetzt deine Eingabedatei ist wirklich immer so formatiert, wie du das oben angegeben hast.
 
Du kannst es dir auch leichter machen und die url.txt schlichtweg auf deinen Client downloaden und mit Notepad++ zerfriemeln.

Dann sparst Du dir das Perl-Vodoo ;-)
 
Solltest du dich für das Skript von distrophik entscheiden, kannst du den Loop auch leicht abändern

Code:
while ( my $line = <$input> ) {
  next unless $line =~ /^Adresse:\s+\[.+,\s+(\d+)\s+(\w+)/i;
  print $output "$1 $2\n";
}
 
Zurück
Oben