Schrift
[thread]7194[/thread]

Dateiliste einlesen, verarbeiten, in Mysql: Rokkie halt..

Leser: 3


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
esskar
 2005-07-31 16:00
#57032 #57032
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Rookie72
 2005-08-01 00:23
#57033 #57033
User since
2005-07-31
6 Artikel
BenutzerIn
[default_avatar]
Hallo

Danke erstmal für die Tipps und Links.

Wie kann ich aber die erste Datei öffnen? Ich habe so rausgefunden, wie man nur die txt-dateien in die Variable einliest, aber es gelingt mir nicht den ersten Wert dem Befehl open zuzuweisen....

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

use strict;

my $Verzeichnis = "/usr/web/ars_vivendi";
opendir(DIR, $Verzeichnis) || die "$Verzeichnis: $!";
my @Dateien = readdir(DIR);
foreach(@Dateien) {
if($_ =~ /.+\.txt*/) {
  open "$_";
  }
};


Danke nochmals

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1122848254-->
esskar
 2005-08-01 01:27
#57034 #57034
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
in $_ steht nur der dateinamen drin; du musst das verzeichnis noch angeben; und du musst nicht alle dateien in eine array lesen, sondern kannst einfach jede nach einander abarbeiten; außerdem musst du auspassen, dass du nicht "." und ".." versuchts zu öffnen (aber ich das maschst du ja nicht wegen deines regexp, sehr schön)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my $Verzeichnis = "/usr/web/ars_vivendi";
opendir(my $dh, $Verzeichnis) || die "$Verzeichnis: $!";
while(my $filename = readdir($dh)) {
if($filename =~ /.+\.txt*/) {
my $fullpath = "$Verzeichnis/$filename";
open(my $fh, $fullpath) or die $!;
# mach was
close $fh;
}
}
closedir($dh); # nicht vergessen
renee
 2005-08-07 22:50
#57035 #57035
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
my $string = #07082005';
my ($day,$month,$year) = $string =~ /(\d{2})(\d{2})(\d{4})/;
print $year,"-",$month,"-",$day,"\n";
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/
Rookie72
 2005-08-07 23:31
#57036 #57036
User since
2005-07-31
6 Artikel
BenutzerIn
[default_avatar]
Hallo pq,
sorry, man lernt nie aus... und ich dachte noch, huch, wie merkt das script dass ich da Code reingetan habe.. Die Tastaur ist repariert. Hat zwar ein kleines Vermögen gekostet, aber was solls.... :-))
Inzwischen habe ich mit substr versucht und das aufteilen geht, aber ich kriege die Teile zusammen mit dem - nicht in einen String wieder rein. Hat eventuell mit dem Format zu tun oder was auch immer..

Code: (dl )
1
2
3
4
5
my $datsplit1 = substr($datum, 0, 2);
my $datsplit2 = substr($datum, 2, 2);
my $datsplit3 = substr($datum, 4, 4);
my $datumfixed = '$datsplit3',"-",'$datsplit2',"-",'$datsplit1';
my $sql = "INSERT INTO log SET log_datum='$datumfixed'";


Das Datumfixed ist wohl falsch :-)
Hat jemand eine gute Idee?
Schöne Grüsse
Rookie72
 2005-08-07 21:01
#57037 #57037
User since
2005-07-31
6 Artikel
BenutzerIn
[default_avatar]
Ich bins nochmals...
Unglaublich.. :-) Ich kann nun die Dateiliste einlesen, öffnen, die Werte mit split aufteilen und mit DBI in die mysql-db speichern.

Jetzt kommt - so wie ich es im Internet gelesen habe - bekannte Problem dass Mysql das Datumsformat im 2005-08-07 speichert etc. Kurzum, ist ja nicht schlimm.. :-)

Damit ich nicht ewig suchen muss, kann mir jemand sagen, wie ich dies: 07082005;1700; aufsplitten kann?

Ich habe diese 2 Werte nun in den Variablen $datum und $zeit...
Code: (dl )
my ($datum, $zeit) = split(';',$line);


Wenn ich die Textdatei anpasse an: 2005-08-07;17:00; aufsplitte und mit
Code: (dl )
my $sql = "INSERT INTO log SET log_datum_zeit='$datum $zeit'";

abspeichere, klappts. Ich müsste einfach nach 2 Zeichen aufsplitten können.. soooo einfach :-))

Vielen Dank schon im voraus.\n\n

<!--EDIT|Rookie72|1123445338-->
renee
 2005-08-08 09:01
#57038 #57038
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich hatte fast das selbe oben schonmal geschrieben, aber wer mich ignorieren will... ;)

my $datumfixed = '$datsplit3',"-",'$datsplit2',"-",'$datsplit1';
Was hier falsch ist?? Du solltest Dich mal mit den Unterschieden zwischen ' und " vertraut machen...
Bei " werden die Variablen interpoliert, bei ' nicht.

Außerdem ist eine Stringkonkatenation in Perl mit .
Also würde es richtigerweise heißen:
my $datumfixed = $datsplit3."-".$datsplit2."-".$datsplit1;
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/
Rookie72
 2005-07-31 15:08
#57039 #57039
User since
2005-07-31
6 Artikel
BenutzerIn
[default_avatar]
Hi Perl-Programmierer

Ich brauche ein Perlscript mit folgenden Funktionen:

- Dateiliste in einem Verzeichnis einlesen
 (von einem FTP-Verzeichnis)
- Eine Datei nach der anderen durcharbeiten
 (sind alles Text-Dateien)
- Werte aufsplitten
 (Durch ; getrennt, zuletzt ein Zeilenumbruch)
- Die Werte dann per Kommandozeile in die Mysql DB schreiben
- Datei verschieben in Archiv

Könnte mir jemand evtl. teilweise helfen das script zu programmieren?

Für jeden Teil habe ich irgend ein Code-Schnippsel gefunden, aber mir fehlt der Überblick mit den Variablen.

Vor allem der Anfang, Dateiliste im Verzeichnis einlesen und dann erste Datei öffnen..

Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl -w

use strict;

my $Verzeichnis = "/usr/web/ars_vivendi";
opendir(DIR, $Verzeichnis) || die "$Verzeichnis: $!";
my @Dateien = readdir(DIR);


dann - wie öffne ich die erste Datei?..

Danke schon mal zum voraus

Schöne Grüsse

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1122810609-->
renee
 2005-07-31 16:15
#57040 #57040
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Für CSV-Dateien, bei denen man nicht zu 100% sicher sein kann, dass nicht mal ein ; in den Daten vorkommen kann, würde ich zu CPAN:DBD::CSV (siehe auch Wiki:Artikel) raten.

Die Dateien stehen alle in dem Array @Dateien. Um alle Dateien zu öffnen, musst Du eine Schleife (z.B. foreach) über das Array laufen lassen. Aber aufgepasst! In @Dateien stehen sowohl Dateien als auch Verzeichnisse drin. Wie man das prüfen kann steht in perldoc -f -X.
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/
renee
 2005-08-01 00:32
#57041 #57041
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
foreach(@Dateien) {
if($_ =~ /\.txt$/) {
open(my $fh,"$_") or die $!;
# mach was
close $fh;
}
}


siehe perldoc -f open
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/
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2005-07-31 16:00.