Schrift
[thread]8608[/thread]

Daten vergleich in eine If Else Schleife: If Else Schleife



<< >> 7 Einträge, 1 Seite
Gast Gast
 2006-12-28 11:31
#72780 #72780
Hallo Leute ,
Frohes Fest!

ich habe folgende code geschrieben um daten"RC_CISCO.ID" & GATE_STATE .Data_RefID meine Beide Tabelle RC_CISCO und GATE_STATE zu Vergleichen .

Code: (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/perl -w
#DatenbankAbfragen

use strict;
use warnings;
use DBI;

use Digest::MD5;
my $dbh;
my $raw_data;
my $sqldata;
my $rc;

#####################################RC-CISCO LETZTEN STATUS ABFRAGEN ########################

sub Query{
my $query;
my $sth;
my $execu;
my $newdata;
my $file;
my $ds;
my @ergebnisse;
my @row;
my $sqlrecord;
my $db_id;
my $neid;
my $CISCOID;
my $datarefid;
my $sth1;
my $query1;
my $found;
my $th_dbh;



$query="SELECT * FROM (SELECT RC_CISCO.ID, RC_CISCO.NEID, GATE_STATE.NEID, GATE_STATE.AState, GATE_STATE.TS_LastChange, ".
"GATE_STATE.Data_RefID FROM (RC_CISCO LEFT JOIN GATE_STATE ON RC_CISCO.ID = GATE_STATE.Data_RefID) WHERE ( (GATE_STATE.NEID='$neid')) ORDER BY RC_CISCO.TS DESC) AS SUB1 GROUP BY SUB1.ID";


$sth = $dbh->prepare($query) or die "$DBI::errstr\n";
$ds = $sth->execute or die "$DBI::errstr\n";

while($newdata = $sth->fetchrow_hashref)
{



if (($newdata ->{ID}) eq ($newdata->{Data_RefID}))
{
#RC_CISCO DATEN VERGLEICHEN

if (($newdata->{ID} eq "RC_CISCO$_->{CISCOID}") && ($newdata->{NEID} eq "$_->{neid}")
{
print "$stext:RC_CISCO$_->{CISCOID} unverändert -> Updaten\n";

$query="UPDATE GATE_STATE SET TS_LastChange=NOW() WHERE Data_RefID='$newdata->{ID}' ORDER BY TS_LastChange DESC LIMIT 1;
$sth1= $th_dbh->prepare($query) or die "$DBI::errstr\n";

$ds = $sth1->execute or die "$DBI::errstr\n";
$sth1->finish();


}
}
else

{

print "$stext:Unterschiedliche RC_CISCO Daten für RC_CISCO$_->{CISCOID}...\n";
# Updaten
if ($newdata->{ID} ne "RC_CISCO$_->{CISCOID}")
{
$query="UPDATE RC_CISCO SET ID='RC_CISCO$_->{CISCOID}' WHERE ID='$newdata->{ID}' LIMIT 1;";
$sth1 = $dbh->prepare($query) or die "$DBI::errstr\n";
$ds = $sth1->execute or die "$DBI::errstr\n";
$sth1->finish();
}
}

}
}
}


nun leidert bekomme ich folgende fehler!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Scalar found where operator expected at ./test.pl line 74, near "$sth1= $th_dbh->prepare($query) or die "$DBI::errstr"
(Might be a runaway multi-line "" string starting on line 73)
(Missing operator before $DBI::errstr?)
Backslash found where operator expected at ./test.pl line 74, near "$DBI::errstr\"
(Missing operator before \?)
String found where operator expected at ./test.pl line 76, near "$ds = $sth1->execute or die ""
(Might be a runaway multi-line "" string starting on line 74)
(Missing semicolon on previous line?)
Scalar found where operator expected at ./test.pl line 76, near "$ds = $sth1->execute or die "$DBI::errstr"
(Missing operator before $DBI::errstr?)
Backslash found where operator expected at ./test.pl line 76, near "$DBI::errstr\"
(Missing operator before \?)
String found where operator expected at ./test.pl line 86, near "print ""
(Might be a runaway multi-line "" string starting on line 76)
(Missing semicolon on previous line?)
Scalar found where operator expected at ./test.pl line 86, near "print "$stext"
(Do you need to predeclare print?)
syntax error at ./test.pl line 70, near ")
{"
Global symbol "$stext" requires explicit package name at ./test.pl line 71.
syntax error at ./test.pl line 74, near "$sth1= $th_dbh->prepare($query) or die "$DBI::errstr"
Global symbol "$stext" requires explicit package name at ./test.pl line 86.
Unrecognized character \xFC at ./test.pl line 86.


kann mich jemand helfen!
danke

moderiert v. Relais: fehlerhafte Code-Tags korrigiert, fehlende hinzugefügt.\n\n

<!--EDIT|Relais|1167301116-->
Relais
 2006-12-28 12:24
#72781 #72781
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Fehlermeldung kann Dir helfen, sie sagt, daß Du in Zeile 73 ein Anführungszeichen vergessen hast.

Weiter versendest Du eine Variable $stext in Zeile 71, mit der Perl nicht so recht etwas anzufangen weiß, weil sie nicht deklariert wurde und undef ist.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
renee
 2006-12-28 13:48
#72782 #72782
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nur mal ein paar allgemeine Tipps:

*) Du solltest die ?-Schreibweise von CPAN:DBI verwenden. Die ist auch in diesem PDF gezeigt.

*) Die " um Variablen solltest Du weglassen (z.B. bei "$_->{neid}" )

*) Variablen erst bei der ersten Verwendung deklarieren. So hast Du eine endlos lange Liste mit Variablen am Anfang der Subroutine.

Alternativ könntest Du das so zusammenfassen:my ($newdata,$query,$sth);. So wie es im Moment ist, ist es ziemlich unübersichtlich!

*) Die ganzen SQL-Statements am Anfang initialisieren und schon ein prepare machen. Das bringt etwas bessere Performance und man hat die Statements besser im Blick. Dann ist die ?-Schreibweise von CPAN:DBI aber unerlässlich

Formatierfehler geglättet - Relais\n\n

<!--EDIT|Relais|1167307266-->
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/
bloonix
 2006-12-28 17:42
#72783 #72783
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,28.12.2006, 12:48]my ($newdata,$query,$sth);[/quote]
Wenn ich meinen Senf dazugeben darf... diese Schreibweise ist für ein
paar Variablen okay, aber die Auflistung untereinander finde ich optimaler.

Man kann sie für spätere Anpassungen sehr einfach auskommentieren,
einkommentieren, einen Wert zuweisen oder die Variable einfach so
stehen lassen. Das finde ich eigentlich am Feinsten. Aber vielleicht bin ich
auch einfach nur altmodisch. =)

Was vielleicht von Vorteil wäre, wäre eine alphabetische oder sinngemäße
Sortierung.

Gruss,
opi\n\n

<!--EDIT|opi|1167320591-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2006-12-28 17:53
#72784 #72784
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Klar darfst Du Deinen Senf dazu geben. Alles hat seine Vor- und Nachteile. Das untereinanderschreiben hat den von Dir genannten Vorteil, aber den Nachteil,dass das eine ellenlange Liste wird und ausserdem muss man bei "Nichtverwendung" eine zusaetzliche Zeile auskommentieren. Deswegen bin ich dafuer, die Variablen bei der ersten Verwendung zu deklarieren.

Code: (dl )
1
2
3
4
my $scalar1 = 'Wert1';
my $dbh = DBI->connect($dsn,$user,$pass) or die $DBI::errst;
my $stmt = "SELECT * FROM tabelle WHERE ID = 1';
#...


Das hat beide Vorteile

Bei der langen Liste kann es schnell so aussehen:
Code: (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
my $scalar1;
my $scalar2;
my $scalar3;
my $scalar4;
my $scalar5;
my $scalar6;
my $scalar7;
my $scalar8;
my $scalar9;
my $scalar10;
my $scalar11;
my $scalar12;
my $scalar13;
my $scalar14;
my $scalar15;
my $scalar16;
my $scalar17;
my $scalar18;
my $scalar19;
my $scalar20;
my $scalar21;
my $scalar22;
my $scalar23;
my $scalar24;
my $scalar25;
my $scalar26;
my $scalar27;
my $scalar28;
my $scalar29;
my $scalar30;
my $scalar31;
my $scalar32;
my $scalar33;
my $scalar34;
my $scalar35;
my $scalar36;
my $scalar37;
my $scalar38;
my $scalar39;
my $scalar40;
my $scalar41;
my $scalar42;
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/
bloonix
 2006-12-29 11:25
#72785 #72785
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,28.12.2006, 16:53]Deswegen bin ich dafuer, die Variablen bei der ersten Verwendung zu deklarieren.[/quote]
Dafür bin ich auch. Vorallem Variablen da zu deklarieren, wo sie gebraucht
werden, damit meine ich immer im aktuellen Scope. Aber globale
Variablen - damit meine ich nicht "our" - sind zur besseren Übersicht
ganz oben optimal.

Hier ein Beispielskript:

lhttp://www.cpan.org/authors/id/A/AA/AARONSCA/newsyslog-1.14.pl

Da wäre eine Deklaration in Form von (gekürzt):

my ($DEBUG, $VERBOSE, $NOOP, $NOSIG, $ROOT, $FORCE, $min_pid, @conf, usw.) = (0, 0, 0, 0, 0, 0, 5, (), usw.);

eher unschön. Aber das bleibt wohl geschmackssache. =)\n\n

<!--EDIT|opi|1167384400-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2006-12-29 12:26
#72786 #72786
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich finde so etwas ganz praktisch wenn es "zusammenhängende" Variablen sind, wie z.B. bei einer Datenbank-Verbindung:
Code: (dl )
my ($user,$pass,$db,$host) = ("username","password","datenbank","host");


Klar, dass es dann keine 30 Variablen auf einmal sein sollten...

Aber wie Du schon sagtest: Alles Geschmackssache...
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/
<< >> 7 Einträge, 1 Seite



View all threads created 2006-12-28 11:31.