Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10061[/thread]

aus Textdatei MYSQL - Statement erzeugen

Leser: 1


<< >> 10 Einträge, 1 Seite
renee
 2007-08-13 23:33
#97869 #97869
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schreibt doch sowas in den Bugs-Thread. So muss ich dann immer alles zusammensuchen. Da kann es leicht passieren, dass mir was durch die Lappen geht...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
oblivion
 2007-08-13 21:49
#98081 #98081
User since
2006-01-17
24 Artikel
BenutzerIn
[default_avatar]
Hallo auch,

ich habe heute eine Textdatei mit folgendem Muster bekommen:

klaus@klaus.de klaus
fritz@fritz.de fritz
guenni@guenni.de guenni
hermann@hermann.de hermann

aus dieser Textdatei (mit über 1000 Einträgen) soll ich nun die Email-Adresse und auch den dazugehörigen Namen in eine Datenbank eintragen.
Da ich was Perl angeht wirklich absolut am Stock gehe, hab ich mir gedacht, dass ich das MySQL - Statement einfach generiere und dann in mysql übernehme.

nun hab ich allerdings schon mein erstes Problem:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl -w

# Datei oeffnen
open (USERS, "<users.txt") or die "Konnte Datei nicht oeffnen";
# in ein Array einlesen
@user_lst = <USERS>;
# Datei wieder schliessen
close(USERS);
# durchiterieren durch alle user
foreach $users (@user_lst)
{
$users=~ /(\w.*)\s/;
print "$1 \n";
}


ich wollte eigentlich nur die Email-adresse in $1 haben, bekomme aber die gesamte Zeile angezeigt. Ist es denn falsch, in diesem Falle nach dem Leerzeichen bzw. Steuerzeichen zu suchen?

Falls ich auch mit diesem Lösungsansatz vollkommen daneben liege, lasst es mich bitte wissen, bin für jede Anregung dankbar.

ähm, irgendwie taucht der thread 3 mal auf ? Bitte die anderen beiden löschen.
renee
 2007-08-13 22:50
#98083 #98083
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use strict;
use warnings;
use

my $input = '/path/to/file.txt'; # die Ausgangsdatei
my $output = '/path/to/ergebnis.sql'; # das Ergebnis

# öffne die Ausgangsdatei, verwende ein lexikalisches Filehandle
# und fange eventuelle Fehler ab.
# verwende die 3-Arg-Form von open
open my $fh, '<', $input or die $!;

while( my $line = <$fh> ){
    chomp $line; # entferne das Newline
    my ($email, $name) = split / /, $line,2; # teile die Zeile am Leerzeichen - genau einmal teilen
    # hier dann sql-Statement ausgeben
}

close $fh;


Ich würde Dir empfehlen, Dich direkt mit der Datenbank zu verbinden, damit Du das quoting von CPAN:DBI übernehmen kannst. So müsstest Du Dich um SQL-Sonderzeichen selbst kümmern...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-08-13 22:58
#98087 #98087
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
oblivion+2007-08-13 19:49:18--
[email-adressen mit echten domains]

bitte in zukunft example-adressen posten, die sind, wie der name schon sagt, für beispiele gedacht.
Quote
ähm, irgendwie taucht der thread 3 mal auf ? Bitte die anderen beiden löschen.

hast du dreimal auf submit geklickt oder so?
irgendwie passiert das grad häufiger, wäre mal interessant zu wissen, was da schiefläuft...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
RPerl
 2007-08-13 22:58
#98088 #98088
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Renee's ist klar besser.
Hier mal meins:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;


my @stuff = ('klaus@klaus.de klaus', 'fritz@fritz.de fritz', 'guenni@guenni.de guenni', 'hermann@hermann.de hermann');


foreach my $foo (@stuff) {
        $foo =~ /(\w+\@\w+\.\w+)\s(\w+)/;
        print $1 . " => ". $2;
        print "\n";
}
RPerl
 2007-08-13 23:01
#98091 #98091
User since
2006-11-26
384 Artikel
BenutzerIn

user image
@pq:

Kann ich dir erklaeren. Nach dem posten wird man auf

http://board.perl-community.de/perl-bin/board.pl?a...

redirected, wenn man jetzt auf reload geht und die naechste Meldung vom Browser mit "Yes" beantwortet, gibt es 2 Threads

// Edit:

http://img405.imageshack.us/img405/3097/unbenanntp...
oblivion
 2007-08-13 23:12
#98093 #98093
User since
2006-01-17
24 Artikel
BenutzerIn
[default_avatar]
vielen Dank an Euch alle, der Code von renee hat mir die Lösung schon gebracht, lacht mich jetzt nicht aus, aber ich habs mal so gemacht

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

my $input = 'users.txt'; # die Ausgangsdatei
# my $output = '/path/to/ergebnis.sql'; # das Ergebnis

# öffne die Ausgangsdatei, verwende ein lexikalisches Filehandle
# und fange eventuelle Fehler ab.
# verwende die 3-Arg-Form von open
open my $fh, '<', $input or die $!;
$i=1;
while( my $line = <$fh> ){
$i++;
chomp $line; # entferne das Newline
my ($email, $name) = split / /, $line,2;
print "INSERT into `profiles` (userid, login_name, realname) VALUES ($i, '$email', '$name');\n";

}

close $fh;

und die Ausgabe in eine Datei gepiped, die ich dann mit mysql < addusers.sql eingelesen habe. Leider fehlt mir wirklich das KnowHow was Ihr Jungs hier an den Tag legt, aber umso besser, dass man Euch hier findet ;-)

Machts gut und @ RPerl, werde in Zukunft besser lesen was ich so wegklicke ;-)
RPerl
 2007-08-13 23:13
#98094 #98094
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Quote
lacht mich jetzt nicht aus, aber ich habs mal so gemacht
Das Ergebnis ist das was wichtig ist. Oder anders: geloest ist geloest. ;)
pq
 2007-08-13 23:13
#98095 #98095
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hab ich auch grad gesehen, dass da ein redirect fehlt.
erstens ist das eigentlich standard, nach posts ein redirect zum machen, und
zweitens hatte ich das (vor wochen oder monaten) auch schon mal hier angemerkt,
und afaik ist das auch in die todo-liste gekommen. muss mir die liste nochmal
genau ansehen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
RPerl
 2007-08-13 23:15
#98097 #98097
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Wenn wir schon dabei sind: Bei der Registrierung sollte ein captcha rein. Imho sogar ein Sicherheitsrisiko ohne.

// edit: Ah nochwas:
Wenn man eingelogged ist sollte man auch hier "weggejagt" werden:

http://board.perl-community.de/perl-bin/board.pl?a...
<< >> 10 Einträge, 1 Seite



View all threads created 2007-08-13 21:49.