Schrift
[thread]560[/thread]

uninitialized value



<< >> 9 Einträge, 1 Seite
Gast Gast
 2005-08-29 11:55
#5506 #5506
Also ich tu eigentlich nix weiter als einen string in einen array aufzusplitten.

@dbarray = split(/::/, $string);

wenn ich dann per $dbarray[1] auf die Teilstrings zugreifen möchte bekomme ich die Warnung "uninitialized Value at".

Dies find ich doch sehr verwirrend, da das Ganze ja eigentlich funktioniert..

Kann mir das wer erklären?
renee
 2005-08-29 12:00
#5507 #5507
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da wir nicht wissen, wie der Inhalt von $string aussieht, können wir nur raten, z.B. könnte der String so aussehen: eins::::zwei Dann steht zwischen :: und :: nichts, deswegen ist der Teilstring undef! Aber das ist jetzt nur rumgerate...
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/
DocJunioR
 2005-08-29 12:47
#5508 #5508
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
print "------------------\nCheck for Alter:\n------------------\n$mnarray[1] 03:00:00\n vs \n$dbarray[1]\n";

Gibt ja was sinnvolles aus. Die einzige Möglichkeit ist die, daß die Zeile selber leer ist und das prüfe ich ab, denk ich.
der komplette Teil lautet:

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
       foreach $mnrow (@mndata)
{
@mnarray = split (/::/, $mnrow);
$termin = 0;

if ($mnrow ne "\n")
{
@dbarray = ();
foreach $dbrow (@dbdata)
{

@dbarray = split (/::/, $dbrow);

print "------------------\nCheck for Alter:\n------------------\n$mnarray[1] 03:00:00\n vs \n$dbarray[1]\n";


#abgleich der Einsatztermine

if ($dbarray[1] eq $mnarray[1]." 03:00:00")

{ # gleiche Termine

# vergleichen der Daten und ggf. Änderung einschreiben

if (

$dbarray[2] ne "$mnarray[15] 18:00:00" # QS-Anfang

|| $dbarray[3] ne "$mnarray[16] 18:00:00" # QS-Ende

|| substr($dbarray[4],0,length($mnarray[2])) ne $mnarray[2] # Bemerkung

)

{

&alterSD ($dbarray[0], $mnarray[1], $mnarray[15], $mnarray[16], $mnarray[2]);

print "altering $dbarray[0] in SEDIS\n";

}

$termin = 1;

}
}
}

if ($termin == 0)
{ # ist der Termin nicht vorhanden, wird der Eintrag erzeugt
&addToSD($mnarray[1], $mnarray[15], $mnarray[16], $mnarray[2]);
print "adding $mbarray[1] to SEDIS\n";
}
}


P.S.: ist irgendwie irrsinnig, posts schreiben zu dürfen, aber keine beantworten zu können..
renee
 2005-08-29 12:54
#5509 #5509
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast ein Array mnarray willst dann aber mbarray verwenden. Das funktioniert nicht...

Unbedingt mal Wiki:use strict; anschauen...
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/
DocJunioR
 2005-08-29 13:17
#5510 #5510
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Dies ist allerdings nur eine Testausgabe.
Das wäre mir mit use strict bestimmt auch aufgefallen ;)
allerdings ist dies nicht der Fehler
Der Fehler wird durch den $dbarray[1] beispielsweise in
Code: (dl )
if ($dbarray[1] eq $mnarray[1]." 03:00:00")

produziert, allerdings weiß ich nicht, warum.
renee
 2005-08-29 13:22
#5511 #5511
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du überprüfst z.B. nicht, ob $dbrow eine Leerzeile ist und ob Du testest nie, ob das Element undef ist...
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/
DocJunioR
 2005-08-29 13:33
#5512 #5512
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Dies liegt daran, daß $dbrow aus einem SQL-Script geliefert wird.
Hier sind entweder Zeilen drin oder nicht.
Zu prüfen, ob der Datensatz leer ist, ist verlorene Liebesmüh. Da sämtliche von mir überprüften Werte dort auch Pflichtfelder sind, kann ich eigentlich sicher sein, daß was in den Spalten steht.
renee
 2005-08-29 13:36
#5513 #5513
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann bist Du Dir auch sicher, dass mindestens 1 :: darin vorkommt...

Du solltest Dir Informationen nicht so aus der Nase ziehen lassen, wenn Du willst, dass man Dir hilft...

Lass Dir einfach alles mal ausgeben, dann wirst Du den Fehler schon finden...
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/
DocJunioR
 2005-08-30 10:18
#5514 #5514
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Also ich habs mir nochmal genau angeschaut.
Die Daten aus der Oracle-DB waren tatsächlich nicht ganz korrekt. Aus irgendwelchen Gründen werden Leerzeilen erzeugt, obwohl dies laut Beschreibung nicht passieren sollte.
Naajaa, hat nen alter Fachinformatiker noch gelernt, keiner Anleitung zu trauen...
<< >> 9 Einträge, 1 Seite



View all threads created 2005-08-29 11:55.