Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
Hallo zusammen, habe folgendes Problem:Ich möchte aus einer Textdatei bestimmte Infos in eine DB schreiben. das Auslesen der Datei hab ich hinbekommen, aber wie Trenne ich die Werte voneinander? Aufbau der Datei:
Name=Müller Vorname=Heinz Tel=123456 usw
nun möchte ich diese Daten in eine Mysql-DB schreiben. #!/usr/bin/perl -w # # Script um wav Datein in DB zu schreiben # Perl Module use strict; use LWP; use DBI; use vars qw($zeile); use CGI::Carp qw(fatalsToBrowser);my $DB_NAME = "test"; my $DB_DSN = "DBI:mysql:database=$DB_NAME"; my $DB_USER = "test"; my $DB_PASSWD = ""; my $dbh = DBI->connect($DB_DSN, $DB_USER, $DB_PASSWD) or die "Fehler bei Datenbankverbindung: $!"; # erst mal die txt Dateien auslesen my $TXTPATH = "/home/rolf"; open(DATEI, "<$TXTPATH/adress.txt") || die "Datei nicht gefunden"; my @lines = (<DATEI>); close (DATEI); print "$lines[4]\n"; print "$lines[9]\n"; print "$lines[10]\n"; print "$lines[11]\n"; print "$lines[12]\n"; my $sql = qq["insert into voicebox (user, messages) VALUES ( '$lines[4]', '$lines[10]')"]; my $sth = $dbh->do($sql); # my @DB_FELDER = $dbh->list_fields('voicebox'); $dbh->disconnect; es werden die richtigen Werte ausgelesen, aber ich weiß nicht wie ich Sie trennen kann, mit spit hab ich es nicht hinbekommen. Danke für die Hilfe Rolf
Datum: 06.01.2006-13:55

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
my(@parts) = split(/\s*=\s*/, $line, 2);
-- 3a2d275a5c68d91e376c562e86419f35
Datum: 06.01.2006-20:21

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
| Hallo Rolf, Was willst Du denn wie/wonach trennen? Hast Du ein Beispiel dafür? Was hast Du versucht? Gruss, Michael
Datum: 06.01.2006-20:21

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
Hallo, danke für die schnellen Antworten. Also Die datai die ich bekomme hat folgenden Aufbau: Name=Mueller Vorname=Heinz Position=GF uswIch brauche daraus nun nur Mueller Heinz GF die ich in eine DB übergeben möchte. Ich hab es bisher mit split versucht (split /=/, $zeile); leider ohne Erfolg. Gruß Rolf
Datum: 07.01.2006-00:33

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
| Hallo Rolf, Dann warst Du nahe dran: split gibt eine Liste zurück, also zumindest den Teil vor (scalar 0) und den Teil nach (scalar 1) dem Pattern. Versuch' doch 'mal so etwas wie dieses: $s = "Name=Mueller"; @s = split /=/, $s; print $s[0]; # ergibt: Name print $s[1]; # ergibt: Mueller
Wenn Du's ganz eilig hast, kannst Du natürlich auch so etwas machen: $ergebnis = (split /=/, $s)[1];
und so gleich auf das Ergebnis zugreifen (steht unter dem Listenindex '1'). Gruss, Michael
Datum: 07.01.2006-17:31

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
danke es funktioniert :):)
Datum: 07.01.2006-17:39

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
| Hallo soweit geht es, aber ich bekomme nur einen Teil meiner Datei zurück, also: Name=Müller Vorname=Heinz Telefon= 123456 PLZ=45678 Ort=Hierhausen zurück bekomme ich aber nur "Müller" $s = "Namederdatei.txt"; @s = split /=/, $s; print $s[0]; # ergibt: Name print $s[1]; # ergibt: Mueller was muss ich noch tun, damit perl ganze dateien ausliest und mir nur einen Teil Salar[1] ausgibt, damit dann dieser Teil in eine DB geschrieben werden kann? danke Rolf
Datum: 09.01.2006-06:56

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
| Hallo Rolf, Dazu mußt Du das File einlesen und Zeile für Zeile durchgehen. Also z.B. so: $f = "Namederdatei.txt";open F, $f or die "Kann $f nicht oeffnen $!\n"; @x = <F>; # alles einlesen close F; foreach $s (@x) { # für jede Zeile @s = split /=/, $s; print $s[0] . "\n"; # ergibt: Name print $s[1] . "\n"; # ergibt: Mueller }
Gruß, Michael
Datum: 09.01.2006-20:54

|
re: Perl: brauche nur Teile einer Textdatei
|
Seitenanfang |
Hi, mir scheint, hier fehlt noch was: alle Zeilen haben noch das Newline, das wird sicher Probleme geben, bzw. vermute ich, dass Du nicht hinter jedem Wert noch einen Zeilenumbruch in der Datenbank stehen haben willst. Am einfachsten geht das (bei Deinem Code) so:
open F, $f or die "Kann $f nicht oeffnen $!\n"; @x = <F>; # alles einlesen chomp @x; # <- auf alle Elemente des Arrays chomp() anwenden close F;
Gruss, svenXY
Datum: 11.01.2006-10:47

|