Variabeln nciht identisch trotz gleichem inhalt!

Hallo ich habe mir ein Programm geschrieben, mit dem ich meinen d-link router per telnet anweisen kann, zu bestimmten zeiten die einwahldaten zu ändern.

die daten werden aus einer datei eingelesen. soweit so gut. anschließend wird der tag in der datei mit dem aktuellen tag verglichen. bei einer übereinstimmung soll das gleiche bei den stunden und minuten passieren und dann ggf. ein textfeld mit befehlen gefüllt werden, welche dann an den router geschickt werden.

mein problem:

wenn ich in der datei den tag nr. 3 (also dienstag) angebe und es auch dienstag ist, dann stimmen die beiden variabeln (lsttag [tag aus datei] und tag [aktueller tag]) nicht überein! Warum? Beide sind integer also müssten sie doch gleich sein, oder?

_ Quellcode>
’ Aktualität der Einwahldaten überprüfen

’ Datei zum einlesen öffnen
Close 1
Open „list.lst“ For Input As 1

’ Variabeln vorbereiten
Dim tag, stunde, minute, lsttag, laststunde, lstminute As Integer
Dim lstpw, lstdialnum, lstusr, lstisp As String

’ Aktuelles Datum ermitteln
tag = DatePart(„w“, Date)
stunde = DatePart(„h“, Date)
minute = DatePart(„n“, Date)

’ Liste löschen
txtCommand.Text = „“

Do Until EOF(1)

’ Zeile einlesen
Line Input #1, read

’ Zeile zerlegen
lsttag = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lsttag) - 1)

lststunde = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lststunde) - 1)

lstminute = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lstminute) - 1)

lstisp = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lstisp) - 1)

lstdialnum = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lstdialnum) - 1)

lstusr = Left(read, InStr(read, „,“) - 1)
read = Right(read, Len(read) - Len(lstusr) - 1)

lstpw = read

'MsgBox ("tag: " & lsttag & vbNewLine _
& "stunde: " & lststunde & vbNewLine _
& "minute: " & lstminute & vbNewLine _
& "isp: " & lstisp & vbNewLine _
& "dialnum: " & lstdialnum & vbNewLine _
& "user: " & lstusr & vbNewLine _
& "password: " & lstpw & vbnewine)

If lsttag = tag Then

If lststunde = stunde Then

’ Befehlsfeld füllen und Befehle senden
txtCommand = "CONNECT " & txtHost.Text & vbNewLine _
& „WAITFOR Password:“ & vbNewLine & "SEND " _
& txtPassword.Text & vbNewLine _
& "SEND isdn isp ispname " & lstisp & vbNewLine _
& "SEND isdn isp dialnum " & lstdialnum & vbNewLine _
& "SEND isdn isp username " & lstusr & vbNewLine _
& "SEND isdn isp password " & lstpw & vbNewLine _
& „SEND sys reboot“ & vbNewLine _
& „DISCONNECT“

Call send_

Das Einlesen der Daten erfolgt problemlos nur bei der If-Abfrage funzt es nicht mehr.

Ich benutze VB 6.0 wenn das weiterhilft sowie windows xp.

schon mal danke für eure hilfe!

Hallo Hannes

Dass die Variablen „tag“ und „lsttag“ als integer definiert sind, ist ein Irrtum!
Wenn du es nämlich in VB6 so definierst:

Dim tag, stunde, minute, lsttag, laststunde, lstminute As
Integer

dann ist nur lstminute als integer definiert, für alle anderen Variablen davor in dieser Zeile gilt das Integer nicht und sie werden daher zu Variant!

Mit

tag = DatePart(„w“, Date)

bekommt dann die Variable „tag“ einen numerischen Wert, während

lsttag = Left(read, InStr(read, „,“) - 1)

der Variablen „lsttag“ einen alphanumerischen Wert zuweist.

Gibt es bei

If lsttag = tag Then

nicht eine Fehlermeldung, dass die Typen unterschiedlich sind? (type mismatch)
Oder vielleicht ist es VB6 auch egal, wenn beide Variablen als Variant definiert sind.

In VB.net würde es übrigens so funktionieren, wie du es gemacht hast, glaub ich. Zumindest wären die Variablen da wirklich alle als integer definert. :wink:

MfG
Roland

Hallo,

Line Input #1, read

’ Zeile zerlegen

gib mal ein Beispiel, wie der Inhalt der Variablen ‚read‘ danach aussieht. Deinen Code verstehe ich nicht vollständig, keine Ahnung, warum Du das so kompliziert machst. Wenn in read Datum und Zeit stehen, würde der Code bei mir so aussehen:

Open "list.lst" For Input As 1

Dim tag As Integer, \_
 stunde As inreger, \_
 minute As Integer, \_
 lsttag As Integer, \_
 laststunde As Integer, \_
 lstminute As Integer

' Aktuelles Datum ermitteln
tag = Day(Now)
stunde = Hour(Now)
minute = minute(Now)

Do Until EOF(1)

' Zeile einlesen
Line Input #1, read

 lsttag = Day(read)
 laststunde = Hour(read)
 lstminute = minute(read)


 If lsttag = tag Then
 If lststunde = stunde Then

 '....

Gruß, Rainer

danke, das war die lösung. jetzt funktioniert das!
gibt es denn keine möglichkeit mit vb6 mehrere variabeln gleichzeitig als integer oder so zu definieren, ohne jedes mal

Dim _variable_ As Integers

für jedes variable zu schreiben.

Hallo Hannes

gibt es denn keine möglichkeit mit vb6 mehrere variabeln
gleichzeitig als integer oder so zu definieren, ohne jedes mal
Dim variable As Integer
für jedes variable zu schreiben.

Nein, diese Möglichkeit gibt es in VB6 leider nicht.
Man kann zwar mehrere Variablen in einer Zeile definieren, indem man z. B. schreibt
dim a as integer, b as integer, c as integer
aber es muss eben immer jeder einzelnen Variablen ein Typ zugewiesen werden.

MfG
Roland