| Autor |
Beitrag |
Chiller
      
Beiträge: 34
|
Verfasst: Fr 03.04.09 22:18
Hallo
ich bin gerade dabei einen "teletext" zu schreiben, bei dem man wie bei dem vom fernseher aber möglichst noch innerhalb einer sekunde abrufen kann...
der einfachkeit halber habe ich nun einfach den dax-punktewert von finanztreff.de auslesen und entsprechend auf der Seite in ein Label geschrieben!
nun ist mein problem dass dabei schon das programm 3 sekunden hängt, bzw es macht einfach nichts mehr, es kommt auch keine sanduhr, die uhr die ich eingebaut habe bleibt einfach stehen und das programm regt sich für 3 sekunden nicht mehr, die speicherauslastung im taskmanager zeigt auch keine erhöhung des verbrauchs...
was kann ich nun also tun wenn ich eine ganze nachrichtenseite innerhalb von 1 sekunde auslesen lassen möchte, dabei am ebsten noch ohne hängen(wobei mein pc nicht sonderlich schlecht ist und auch sonst selten hängt)?
schon mal danke für die antworten
Chiller
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 03.04.09 22:26
Hey!
Ich fürchte, ohne Code oder nähere Beschreibung, wie du die Daten ausliest, werden wir dir wohl kaum weiterhelfen können.
Du könntest allerdings deine Funktion zum Auslesen einen eigenen Thread spendieren, damit das Hauptprogramm nicht völlig blockiert wird. 
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Fr 03.04.09 22:45
das ist die procedure mit der ich den einen(!) wert auslesen...doch allein auf diese eine teletextseite sollen noch mindestens 4 andere kommen...
zu dem thread, leider habe ich erst seit einem dreiviertel jahr in der schule informatik lerne dort meiner meinung eh zu wenig, deshalb habe ich mir das mit dem textstellenauslesen selbst beigebracht...und weiß deshalb auch nicht ansatzweiße wie ich das mache war wir bis jetzt nur immer variabeln eingelesen und auf verschieden arten weiter verarbeitet haben...
MfG Chiller
Zuletzt bearbeitet von Chiller am So 05.04.09 17:46, insgesamt 1-mal bearbeitet
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 03.04.09 23:20
Chiller hat folgendes geschrieben : | Delphi-Quelltext 1:
| Text:=HTTP.Get('http://finanztreff.de/'); | |
Du kannst im Programm an den Anfang der Prozedur einen Haltepunkt setzen (F5 glaube ich) und dann, wenn das Programm dort anhält, per F8 zeilenweise durchgehen. Dabei wirst du merken, dass an dieser Zeile die meiste Zeit draufgeht, so vermute ich.
Während das idHTTP auf die Antwort der Seite und auf das herunterladen des Quellcodes wartet, kann die Prozedur unter keinen Umständen weiterlaufen.
Ich denke, dass du mit einem Thread am besten dran bist, aber ich kenn mich auf dem Gebiet leider noch nicht aus...
Wenn du nur einzelne Daten auslesen willst, sorge dafür, dass die Variable "text" nicht mehrmals beschrieben werden muss, du könntest sie global machen. Auf die Art minimierst du die "Einfrierzeit", falls du nur diese eine Seite abfragen musst.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Fr 03.04.09 23:59
nein, geplant war dass ich noch ca 100 andere Textstellen aus Seiten auslese...
da kann ich nur probieren eine andere seite mit weniger quellcode zu bekommen, die er dann schneller laden kann...
danke für die antworten, außer jmd weiß noch irgend etwas...
|
|
tif
      
Beiträge: 46
Erhaltene Danke: 1
Winxxx
TP, BP, Delphi 1 - 2009
|
Verfasst: Sa 04.04.09 06:27
Hallo,
versuche mal, eine TIDAntiFreeze - Komponente mit in dein Formular zu ziehen. (Ungetestet.)
Tino
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 13:32
was für eine komponente ist das /was macht die...habe ich noch nie gehört und weiß auch nicht wie ich das mache...
MfG Chiller
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 15:51
mitlerweile schifft es das programm alle daten die ich auf einer seite anzeigen lassen will in 2 sekunden zu generieren indem ich alle daten von einer seite von nur einer webseite beziehe und somit den quellcode der seite nur einmal laden muss...
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 04.04.09 16:05
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 18:32
mitlerweile habe ich aber ein etwas größeres problem:
delphi schafft es zwar, den seitencode auszulesen, doch gibt mir keine variable zurück, das habe ich bereits mit mehreren seiten probiert und finde infach keine lösung...
probiert ahbe ich das immer mit folgendem code, wenn man den text ab MText.Text:=Text; bis zum nächsten end; als kommentar markiert und einfach den gesamten Quellcode mit MText.Text:=Text ins Memo schrieben lässt sieht man, dass er den code hat, doch wenn ich ein textstück heraus schneiden lassen will geht das nicht
die seite ist zb eine bei der es nicht funktioniert...
ich hoffe auf eine helfende Antwort
MfG Chiller
Zuletzt bearbeitet von Chiller am So 05.04.09 17:47, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 18:44
Du musst deinem a gleich die Länge hinzuaddieren, du findest nämlich das Stück mit b und PosEx innerhalb deines ersten Suchstrings...
PosVariable solltest du vielleicht gleich benutzen statt den String doppelt manuell zu schreiben. 
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 19:04
jaenicke hat folgendes geschrieben : | Du musst deinem a gleich die Länge hinzuaddieren, du findest nämlich das Stück mit b und PosEx innerhalb deines ersten Suchstrings...
PosVariable solltest du vielleicht gleich benutzen statt den String doppelt manuell zu schreiben.  |
die länge habe ich aj unten mit a+c hinzuaddiert, dass man das b stück in a findet ist nur zufalll...das nachdem ich mit b suche steht aj dann hinter dem a-text-stück...
das problem ist ja dass ich gar nichts herausgegeben bekomme, nicht dass er mir etwas falsches ausgibt...!
und ich wei´nicht woran das liegt, da dieses programm bei anderen webseiten ja perfekt funktioniert, nur bei einigen wie dieser nicht, dann wird gar nichts ausgegeben...
MfG Chiller
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 04.04.09 19:31
Delphi-Quelltext 1: 2:
| a:=(Pos('>adidas</a></td><td width="50" align="right">', Text)); b:=(Posex('</td><td', Text, a)); | Du suchst mit PosEx ab dem Start des gefundenen Stücks, wie gesagt... Und deshalb findest du das jetzt markierte Stück...
Außerdem gehören die Klammern um alles nicht hin, an anderer Stelle verursacht das Fehler.
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Sa 04.04.09 20:07
Chiller hat folgendes geschrieben : | was für eine komponente ist das /was macht die...habe ich noch nie gehört und weiß auch nicht wie ich das mache...
MfG Chiller |
Eigentlich hilft ein "Application.ProcessMessages;" immer, damit nichts einfriert oder wenigstens der Ticker weiterläuft.
_________________ Salus populi suprema lex esto
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 04.04.09 20:17
delphi10 hat folgendes geschrieben : | | Eigentlich hilft ein "Application.ProcessMessages;" immer, damit nichts einfriert oder wenigstens der Ticker weiterläuft. |
Dann bring mir mal ein Application.ProcessMessages in diesen Code ein: idHTTP1.Get('website');  Oder an welcher Stelle dieser einen Zeile glaubst du, ein Abarbeiten der Nachrichtenwarteschlange wäre sinnvoll?
Du könntest mit URLDOWNLOADTOFILE (unit urlmon) arbeiten, da kannst du eine Callback-Prozedur angeben, die du nutzen kannst um eine Statusanzeige für den Download zu aktualisieren und dort könnte man tatsächlich ein Application.ProzessMessages anbringen wodurch das Einfrieren verhindert würde. Und man hätte eine Statusanzeige
Es gibt auch andere URLDownloadToXXX-Prozeduren mit denen du um das Zwischenspeichern als Datei herumkommen müsstest...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Zuletzt bearbeitet von JayEff am Sa 04.04.09 21:21, insgesamt 2-mal bearbeitet
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 21:14
jaenicke hat folgendes geschrieben : | Delphi-Quelltext 1: 2:
| a:=(Pos('>adidas</a></td><td width="50" align="right">', Text)); b:=(Posex('</td><td', Text, a)); | Du suchst mit PosEx ab dem Start des gefundenen Stücks, wie gesagt... Und deshalb findest du das jetzt markierte Stück...
Außerdem gehören die Klammern um alles nicht hin, an anderer Stelle verursacht das Fehler. |
in diesem fall sit das anders, cih ahbe das ja mit etwas hilfe selbst geschrieben, nicht kopiert...
in diesem fall wird der text durchsucht...der ist der quellcode der oben als erstes eingefügten seite, a ist die erste koordinate ab wo das was ich auslesen lasse beginnt, b die stelle an der ich den nach a weiterführede text wieder abschneiden lasse, der ja nach a beginnt...
und c musste ich als länge hinzufügen, da er warum auch immer die variable zuvor ausgelsen hat...
dass b nochmal in a vorkommt ist nur zufall da das was ich haben will zwischen den text von a und b steht...und es ein html code und a länger ist dass er auch die richtige stelle im quellcode findet...
MfG Chiller
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 04.04.09 21:20
Chiller hat folgendes geschrieben : | jaenicke hat folgendes geschrieben : | | Außerdem gehören die Klammern um alles nicht hin, an anderer Stelle verursacht das Fehler. | in diesem fall sit das anders, cih ahbe das ja mit etwas hilfe selbst geschrieben, nicht kopiert... |
Bezieht sich dein Kommentar auf die Klammern? Falls ja, die gehören da nicht hin, fertig aus.
Chiller hat folgendes geschrieben : | in diesem fall wird der text durchsucht...der ist der quellcode der oben als erstes eingefügten seite, a ist die erste koordinate ab wo das was ich auslesen lasse beginnt, b die stelle an der ich den nach a weiterführede text wieder abschneiden lasse, der ja nach a beginnt...
und c musste ich als länge hinzufügen, da er warum auch immer die variable zuvor ausgelsen hat...
dass b nochmal in a vorkommt ist nur zufall da das was ich haben will zwischen den text von a und b steht...und es ein html code und a länger ist dass er auch die richtige stelle im quellcode findet |
Glaub jaenicke, in b steht nach deinem Aufruf nichts anderes als a + 11, da in a die Position des ersten Zeichens '>' steht. Du müsstest als letzten Parameter für PosEx nicht a sondern a + 45 übergeben, damit er auch wirklich hinter 'align="right">' weitersucht.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: Sa 04.04.09 21:50
ok, jetzt glaube ich ihn, jetzt hab ichs verstanden
ich hoffe damit komme ich nun weiter, danke!
|
|
Chiller 
      
Beiträge: 34
|
Verfasst: So 05.04.09 01:17
noch eine frage zum teilstring von pos:
ich benötige um die position bestimmen zu können den vorherigen und universellen code, doch nun habe ich das problem dass dieser nur iniversell ist wnen er eine bestimtme länge hat und sich deshalb darin andere stringteile befinden, die sich verändern...
wie kann ich nun also diese teilstücke aus meinem teilsting ausblenden, dass sie bei der suche keine rolle spielen, gibt es eine andere möglichkeit als diese wiederrum auslesen und dann in den suchtext einfügen zu lassen?
habe leider nichts bei google gefunden, delhi hilfe geht auf dieses problem nicht ein...
MfG Chiller
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 05.04.09 01:56
 Ich habe gar nichts verstanden, auch beim zweiten und dritten Durchlesen nicht. Du solltest dir mal etwas mehr Mühe beim Schreiben geben.
Ich rate einmal, dass du jetzt die Länge des Strings oder den String selbst manuell in den Quelltext geschrieben hast, das aber mehrfach machen willst und nicht jedesmal alles kopieren willst?
Du musst schon bei PosEx hinter dem gefundenen ersten String anfangen zu suchen. Am besten pack das alles in eine extra Funktion, der du den Seitenquelltext und Start und Ende des gesuchten Strings übergibst.
In der Funktion hilft dir sicherlich die Funktion Length, die dir die Länge eines Strings zurückgibt.
|
|
|