Autor Beitrag
Chiller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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. :nixweiss:
Du könntest allerdings deine Funktion zum Auslesen einen eigenen Thread spendieren, damit das Hauptprogramm nicht völlig blockiert wird. ;)
Chiller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 03.04.09 23:20 
user profile iconChiller hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 1

Winxxx
TP, BP, Delphi 1 - 2009
BeitragVerfasst: Sa 04.04.09 06:27 
Hallo,

versuche mal, eine TIDAntiFreeze - Komponente mit in dein Formular zu ziehen. (Ungetestet.)

Tino
Chiller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 04.04.09 16:05 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
sorge dafür, dass die Variable "text" nicht mehrmals beschrieben werden muss
Also hast du's so gemacht :zustimm:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Chiller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 04.04.09 19:04 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 04.04.09 19:31 
:roll:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Sa 04.04.09 20:07 
user profile iconChiller hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 04.04.09 20:17 
user profile icondelphi10 hat folgendes geschrieben Zum zitierten Posting springen:
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'); :roll: Oder an welcher Stelle dieser einen Zeile glaubst du, ein Abarbeiten der Nachrichtenwarteschlange wäre sinnvoll?

Du könntest mit Suche in: Delphi-Forum 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 04.04.09 21:14 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
:roll:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 04.04.09 21:20 
user profile iconChiller hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconChiller hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 04.04.09 21:50 
ok, jetzt glaube ich ihn, jetzt hab ichs verstanden :-)

ich hoffe damit komme ich nun weiter, danke!
Chiller Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.04.09 01:56 
:shock: 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.