Fehler in Code, aber warum?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Fehler in Code, aber warum?

Beitrag von PureBasic4.0 »

Hi Leute,

ich bin am verzweifeln. Folgender Code:

Code: Alles auswählen

  Protected Text$
  For a = 1 To CountProxy
    Text$ = GetGadgetItemText(#Proxylist,a-1)
    Pos1 = FindString(Text$,"@",0)
    Debug "Pos of @: "+Str(Pos1)
    If FindString(Text$,"http://",0)
      Text$ = Right(Text$,Len(Text$)-7)
    EndIf    
    Debug Text$
    If Pos1
      Pos2 = FindString(Text$,":",0)
      Debug "Pos of : 1: "+Str(Pos2)
      If Not Pos2
        Continue
      Else
        Pos3 = FindString(Text$,":",Pos1)
        Debug "Pos of : from Pos1: "+Str(Pos3)
        Pos4 = FindString(Text$,":",Pos2)
        Debug "Pos of : from Pos2: "+Str(Pos4)
        User$ = Left(Text$,Pos2-1)
        Pass$ = Mid(Text$,Pos2+1,Pos4-1)
        IP$ = Mid(Text$,Pos1+1,Pos3-Pos1-1)
        Port$ = Right(Text$,Len(Text$)-Pos3)
        Debug "User: "+User$
        Debug "Pass: "+Pass$
        Debug "IP: "+IP$
        Debug "Port: "+Port$
        Debug "---------------"
      EndIf
    Else
      ;...
    EndIf
Next
Wenn ich in #Proxylist z.B.: folgendes eingebe:
http://user:pass@1.2.3.4.5:329
user2:pass2@11.22.33.44.55:5943
user55:pass66@111.222.333.444.555:593
wird bei dem ersten Eintrag die Position des @ Zeichens aus unerfindlichen Gründen falsch gefunden, was sich auf das gesamte Ergebnis auswirkt. Die IP ist dann nur noch .5

Ich hoffe, ihr könnt mir helfen! :allright:

Danke,
PureBasic4.0
Zuletzt geändert von PureBasic4.0 am 10.11.2007 21:51, insgesamt 1-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ausführbarer code bitte.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: Fehler in Code, aber warum?

Beitrag von michel51 »

PureBasic4.0 hat geschrieben:Hi Leute,

ich bin am verzweifeln. Folgender Code:

Code: Alles auswählen

  Protected Text$
  For a = 1 To CountProxy
    Text$ = GetGadgetItemText(#Proxylist,a-1)
    Pos1 = FindString(Text$,"@",0)
    Debug "Pos of @: "+Str(Pos1)
    If FindString(Text$,"http://",0)
      Text$ = Right(Text$,Len(Text$)-7)
    EndIf    
    Debug Text$
    If Pos1
      Pos2 = FindString(Text$,":",0)
      Debug "Pos of : 1: "+Str(Pos2)
      If Not Pos2
        Continue
      Else
        Pos3 = FindString(Text$,":",Pos1)
        Debug "Pos of : from Pos1: "+Str(Pos3)
        Pos4 = FindString(Text$,":",Pos2)
        Debug "Pos of : from Pos2: "+Str(Pos4)
        User$ = Left(Text$,Pos2-1)
        Pass$ = Mid(Text$,Pos2+1,Pos4-1)
        IP$ = Mid(Text$,Pos1+1,Pos3-Pos1-1)
        Port$ = Right(Text$,Len(Text$)-Pos3)
        Debug "User: "+User$
        Debug "Pass: "+Pass$
        Debug "IP: "+IP$
        Debug "Port: "+Port$
        Debug "---------------"
      EndIf
    Else
      ;...
    EndIf
Wenn ich in #Proxylist z.B.: folgendes eingebe:
http://user:pass@1.2.3.4.5:329
user2:pass2@11.22.33.44.55:5943
user55:pass66@111.222.333.444.555:593
wird bei dem ersten Eintrag die Position des @ Zeichens aus unerfindlichen Gründen falsch gefunden, was sich auf das gesamte Ergebnis auswirkt. Die IP ist dann nur noch .5

Ich hoffe, ihr könnt mir helfen! :allright:

Danke,
PureBasic4.0
Versuch mal

Code: Alles auswählen

 Pos1 = FindString(Text$,"@",1)
bei allen "Findstring-Aufrufen.
Die Suche beginnt bei Position "1" und NICHT bei "0".
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> wird bei dem ersten Eintrag die Position des @ Zeichens aus unerfindlichen Gründen falsch gefunden
Bitte mach deinen Code nochmal neu und benutze dieses Mal StringField()!
Damit geht vieles besser!

Damit kannst du Strings wie "user55:pass66@111.222.333.444.555:593" einfacher aufsplitten (erst beim @ Zeichen, dann jeweils nochmal bei den :Doppelpunkten: ).

Code: Alles auswählen

adresse$="user55:pass66@111.222.333.444.555:593"

teil1$=StringField(adresse$, 1, "@")
teil2$=StringField(adresse$, 2, "@")

user$=StringField(teil1$, 1, ":")
pass$=StringField(teil1$, 2, ":")
ip$=StringField(teil2$, 1, ":")
port$=StringField(teil2$, 2, ":")

Debug teil1$
Debug teil2$

Debug user$
Debug pass$
Debug ip$
Debug port$
Bitte gib mal Feedback. :)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Danke, AND51. An StringField hatte ich gar nicht gedacht :lol: . Durch meinen Versuch, C++ zu lernen, bin ich wohl etwas von der PureBasic-Schiene abgekommen.
Immerhin habe ich eines mitbekommen: C++ find ich viel zu schwer. Ich werde mit PB weitermachen
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> An StringField hatte ich gar nicht gedacht
Bitte. Ich kann dir nur empfehlen, jedes mal, wenn du ein Problem lösen willst, vorher in das entsprechende Kapitel in der Hilfe zu schauen, ob es nicht einen passenderen Befehl gibt.
Hier hätte ich z. B. mal in das String-Kapitel der Hilfe geschaut, dann hätte ich es vermutlich gefunden, denn die meisten Befehle sind ja selbsterklärend.

Ich empfehle dir, dir so eine Art "Rundum-Blick" anzueignen, sodass dir bei einem Problem gleich mehere Befehle einfallen, die das Problem lösen könnten, so mach ich das auch immer.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten