FindString

Anfängerfragen zum Programmieren mit PureBasic.
Marc-21
Beiträge: 39
Registriert: 11.02.2008 19:37

FindString

Beitrag von Marc-21 »

Hi habe ein problem mit findstring wenn ich einen text suche hat er das ergebnis beim zweiten durchlauf das ergebnis schon vor der suche . Wie kann mann das ändern. PureBasic 4.2

Code: Alles auswählen


MessageRequester("",f$) ; beim ersten mal nix, und bei zweiten mal Ergebnis schon da

If a=0

e$ = WebGadget_PageText(#Int)

DH$  = "Noch"
DCH$ = "Sekunden"

P1 = FindString(e$, DH$, P2)+4
  
If P1 
            
P2 = FindString(e$,DCH$, P1) 
    
If P2 
      
Else 
EndIf 
Else 
EndIf

f$ = Mid(e$, P1, P2-P1)+"sec"

Danke
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: FindString

Beitrag von Kiffi »

Hai Marc-21,

ohne jetzt genauer hingeschaut zu haben:
Marc-21 hat geschrieben:

Code: Alles auswählen

P1 = FindString(e$, DH$, P2)+4
If P1
If P1 wird immer zutreffen, weil Du immer 4 zu dem Ergebnis addierst (unabhängig davon, ob gefunden oder nicht)

versuch es mal so:

Code: Alles auswählen

P1 = FindString(e$, DH$, P2)
If P1
 P1 + 4
 [...]
Vielleicht ist das schon des Rätsels Lösung

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Würde vielleicht helfen, wenn du einen Beispielstring posten könntest.
Dann wissen wir, wie er vom Muster her aussieht und was du für Strings darin suchst.
Dann können wir dir vielleicht nämlich gleich deinen Code vereinfachen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> habe ein problem mit findstring wenn ich einen text suche hat er das ergebnis beim zweiten durchlauf das ergebnis schon vor der suche . Wie kann mann das ändern.

dein satz ist nicht verständlich...

meinst du mit "durchlauf" deine beiden suchbefehle?

außerdem ist dein code zumindest SO unvollständig, dass das EndIf zu dem oberen "If a" fehlt.
fehlt da noch mehr?

ich habe fast den verdacht, dass du das ganze in irgendeiner schleife oder sonstwas hast,
weil du den kommentar "bei zweiten mal Ergebnis schon da" oben am messagerequester stehen hast.
außerdem startest du die erste suche bei der ergebnisposition der zweiten suche,
sieht also so aus als ob du da mehrfach durchwillst...
ist das der Fall?
dann ist nicht das ergebnis schon da, sondern in f$ steht immer noch das ergebnis vom letzten mal.

... und wenn das tatsächlich der Fall ist, dann schreib sowas doch bei der Frage bitte mit hin!

eine unverständlich formulierte Frage und ein unvollständiger code ist nicht gerade das,
was dir sinnvolle und hilfreiche antworten einbringt.


@AND
versuch nicht, ihm seinen Code zu "vereinfachen", mach das lieber mit seinen Fragesätzen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Marc-21
Beiträge: 39
Registriert: 11.02.2008 19:37

Beitrag von Marc-21 »

Kaeru hat recht habe mich nicht richtig ausgedrückt

Code: Alles auswählen

Select event_g 

Case #button1 ; Enter


;Url$ = GetGadgetText(#Url)

c = FindString(Url$,g$,1)
MessageRequester("",Url$)

If c = 1
StatusBarText(#statbar,0,g$)
Delay(2000)
EndIf

Url$ = "C:\WebBrowser\tmpp3.html"

WebGadget(#Int,0,0,0,0,Url$)

StatusBarText(#statbar,0,"Seite wird geladen")

WebGadget_Busy()

StatusBarText(#statbar,0,"Seite ist geladen")

c$ = GetGadgetItemText(#Int,1)

a = FindString(c$,a$,1)
b = FindString(c$,b$,1)

MessageRequester("",Str(a))
MessageRequester("",f$)

If a=0

e$ = WebGadget_PageText(#Int)

DH$  = "Noch"
DCH$ = "Sekunden"

P1 = FindString(e$, DH$, P2)+4
  
If P1 
            
P2 = FindString(e$,DCH$, P1) 
    
If P2 
      
Else 
EndIf 
Else 
EndIf

f$ = Mid(e$, P1, P2-P1)+"sec"
;MessageRequester("",f$)
StatusBarText(#statbar,0,"Noch"+f$+" bis zum Download")

OpenConsole()
ConsoleTitle("ESC-Abbruch")
sec = Val(f$)
min = 0
timer = ElapsedMilliseconds()


Repeat 

KeyPressed$ = Inkey()
  
If ElapsedMilliseconds() > timer 
; **************** 
    timer + 1000 
; **************** 

sec -1 

    
PrintN(Str(sec)+" sec bis zum Download") 
    
      
Select EvID
      
Case #PB_Event_Gadget 
      
EvID=EventGadget() 
      
Select EvID

EndSelect 
EndSelect
    
EndIf 
Until  sec = 00 Or KeyPressed$ = Chr(27)
If KeyPressed$ = Chr(27)
StatusBarText(#statbar,0,"Abbruch")
EndIf
StatusBarText(#statbar,0,"Download-Startet")
CloseConsole()

Else

If b=0

CH$  = "es in"
CCH$ = "uten wieder"

P1 = FindString(c$, CH$, P2)+10
  
If P1 
            
P2 = FindString(c$,CCH$, P1)-4
    
If P2 
      
Else 
EndIf 
Else 
EndIf

d$ = Mid(c$, P1, P2-P1)

StatusBarText(#statbar,0,"Download Limit erreicht "+d$+" Minuten bitte warten")


EndIf
EndIf
das ist der code wenn mann enter klickt sucht er nach den string und beim zweiten mal enter klicken ist in f$ das ergebins immer noch vorhanden und er sucht nicht mehr wie kann mann das verhindern.

Danke
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

indem man vor der suche f$ löscht indem man f$="" einsetzt...

... und wenn man deinen ganzen code betrachtet, solltest du wirklich auch beachten, was Kiffi zu dem P1=+4 geschrieben hat.


... und mal ein bissel sinnvoll einrücken, dann kann man die gliederung besser erkennen ...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Marc-21
Beiträge: 39
Registriert: 11.02.2008 19:37

Beitrag von Marc-21 »

Danke schön werde es versuchen
Antworten