Thread Skript zum Durchlauf
(5 answers)
Opened by Philip at 2010-07-08 11:24
Der Code macht wetgehend das was du in VBA geschrieben hast.
In perl ist manches, was in VBA einfacher geht, ein wenig umständlich, da die Strukturen etwas anders sind. 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #!/usr/bin/perl use strict; use warnings; use DBI; #server my $host=''; # DB-Name my $database=''; # Login Benutzer my $user=''; # Login Passwort my $pass=''; my $dbi=DBI->connect( "DBI:mysql:database=$database;host=$hostname", $user, $pass, { # script bei Fehler beenden RaiseError => 1, # Änderungen automatisch übernehmen # (macht das schreiben langsamer) AutoCommit => 1, }, ) or die("ERROR Connect DB".$DBI::errstr."\n"); my $sth = $dbh->prepare('Select * from vicidial_agent_log_temp order by user, event_time'); $sth->execute(); # alle Zeilen als hash-Referenzen im Array @storage ablegen my @storage; push(@storage,$_) while($sth->fetchrow_hashref); $sth->finish; my ($user_alt, $time_alt, $summe_alt); # das Array durch gehen for(my $pos=0; $pos<@storage; $pos++) { my $row=$storage[$pos]; next if( ... ); my $summe= $row->{pause} + $row->{'wait'}; if(defined($summe_alt) and $last_summe ... ) { # einen Eintrag zurück springen $pos--; $pos=0 if($pos<0); $row=$storage[$pos]; # aktualisieren eines Eintages: $dbh->do('Update vicidial_agent_log_temp Set gabcom_fehler=? Where user=?', undef, "AutoKorrektur", $row->{user}); # weitere Änderungen ... } $user_alt = $row->{user}; $time_alt = $row->{event_time}; $summe_alt = $row->{pause_sec} + $row->{wait_sec} + $row->{dispo_sec} + $row->{talk_sec}; } # Verbindung zur Datenbank beenden $dbh->disconnect; Was das ganze etwas komplizierter macht ist die Tatsache das dein Code mache DB-Einträge doppelt oder noch häufiger prüfen/verarbeiten kann. Du springst unter Umständen einen Eintrag zurück dann wieder vor. Wäre es sicher, dass ein Eintrag immer nur einmal geprüft werden soll, kann man den letzten Eintrag auch in einer Variable zwischenspeichern und bei Bedarf benutzen. Es wird aber aus dem Codefragmenten nicht klar was genau passieren soll. EDIT: Ein "do" eingesetzt wo es sinnvoll ist Last edited: 2010-07-08 17:16:32 +0200 (CEST) |