Entwickler-Ecke

Internet / Netzwerk - Aktualisierung durch Internet?


Schosch - Mi 21.12.11 22:00
Titel: Aktualisierung durch Internet?
Hey alle zusammen ich bin neu hier im Forum mit dem Ziel ein Top-Programmierer zu werden. Ich bin im Moment noch Schüler einer BBS und mache mein Fachabi im Bereich IT, und als Abschluss-Projekt muss ich einen Währungsrechner programmieren, der in der Lage ist sich die Wechselkurse selbständig aus dem Internet zu holen.

Meine Frage: Hat jemand ne Idee wie ich dass bewerkstelligen kann??

Es geht um meinen Abschluss....


Boldar - Mi 21.12.11 22:16

Hi und :welcome: im Forum.
Schau mal hier! [http://de.lmgtfy.com/?q=Wechselkurs+API]
mfg Boldar


Nersgatt - Mi 21.12.11 22:32

Hallo und willkommen im Forum.

Woher soll der Rechner denn seine Daten bekommen? Sollst Du die selbst auf einem Server ablegen und das Programm holt die Kurse dann dort ab. Oder sollst Du eine bestehende Datenquelle anzapfen (welche?)?


Blawen - Mi 21.12.11 23:16

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
Hey alle zusammen ich bin neu hier im Forum mit dem Ziel ein Top-Programmierer zu werden. Ich bin im Moment noch Schüler einer BBS und mache mein Fachabi im Bereich IT, und als Abschluss-Projekt muss ich einen Währungsrechner programmieren, der in der Lage ist sich die Wechselkurse selbständig aus dem Internet zu holen.

Meine Frage: Hat jemand ne Idee wie ich dass bewerkstelligen kann??

Es geht um meinen Abschluss....
Top-Kopierer oder Top-Programmierer?

Wenn es wirklich schon die Abschlussarbeit ist, hast Du ja schon etliche Stunden mit dem programmieren verbracht.
Und wie immer gilt:
Strategische Gedanken machen (selber!), Informationen einholen und erst am Schluss mit dem coden beginnen.


Schosch - Mi 21.12.11 23:30

Das Programm soll die Kurse von einer Bestehenden Seite ziehen, also keine Seite die ich irgentwie selber gemacht habe oder so..

Ich kann mir dass nur so vorstellen, dass ich irgentwie auf die strings der Seite zugreife um meine Float variabelen oder ggf. array zu verändern.. und das Programm soll vor jedem aufrufen des formulars überprüfen ob die Kurse noch mit der angegebenen Seite übereinstimmen und wenn nicht, dann aktuallisieren...

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconBlawen hat folgendes geschrieben Zum zitierten Posting springen:

Top-Kopierer oder Top-Programmierer?

Wenn es wirklich schon die Abschlussarbeit ist, hast Du ja schon etliche Stunden mit dem programmieren verbracht.
Und wie immer gilt:
Strategische Gedanken machen (selber!), Informationen einholen und erst am Schluss mit dem coden beginnen.


Das Ding ist, dass wir noch nie was in der Schule in Programmieren was gemacht haben was auch nur ansatzweise was mit dem Internet zu tun hat... glaub ich jeden falls... und ich will kein kopierer werden wie Blawen so schön meinte, sondern tatsächlich programierer, nur wenn ich als anfänger grade mal in der schule angefangen hab an der oberfläche zu kratzen, dann brauche ich hilfe bei der lösung des Problems.. Das heiß Foren abklappern und dort wo man glaubt am ehesten die antwort zu erfahren einloggen und fragen... Würde ich versuchen mir das irgentwie selber herzuleiten würde ich wahrscheinlich ohne erfolg bleiben, und dass kan nicht das Ziel sein.. ^^


Blawen - Mi 21.12.11 23:49

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
Das Programm soll die Kurse von einer Bestehenden Seite ziehen, also keine Seite die ich irgentwie selber gemacht habe oder so..

Ich kann mir dass nur so vorstellen, dass ich irgentwie auf die strings der Seite zugreife um meine Float variabelen oder ggf. array zu verändern.. und das Programm soll vor jedem aufrufen des formulars überprüfen ob die Kurse noch mit der angegebenen Seite übereinstimmen und wenn nicht, dann aktuallisieren...
Klingt vom Ansatz her ja schon mal gut.
Frage:
Bietet der Anbieter sowas wie eine Schnittstelle (API) an oder muss Du auf einer (statischen) Seite die Daten auslesen?
Wenn ja, musst Du den Code der Seite analysieren und nach entsprechenden Merkmalen Ausschau halten um die benötigten Werte eindeutig bestimmen zu können. Mithilfe der Analyse kannst Du anschliessend eine Strategie entwickeln.

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
Würde ich versuchen mir das irgentwie selber herzuleiten würde ich wahrscheinlich ohne erfolg bleiben, und dass kan nicht das Ziel sein.. ^^
Das ist eben die falsche Denkweise.
Um eine Strategie entwickeln zu können, bedarf es ja noch keinerlei programmiertechnischer (Delphi-) Kenntnisse. Du wirst schnell merken, dass der Lernerfolg viel grösser ist, wenn Du selber versuchst, das Problem in (lösbbare) Teilprobleme aufzuteilen. Bei der Quelltextanalyse z.B. spielt die Quelle (Textdatei/Webseite) keine Rolle.
Verstehe es nicht falsch, man hilft Dir hier sehr gerne.
Eine Variante der Hilfestellung kann eben auch sein, aufzuzeigen, dass vieles auch mit logischen Denken, bzw. Vorgehen, lösbar wird.
(Und entsprechend auch dafür zu "motivieren")


Schosch - Mi 21.12.11 23:59

user profile iconBlawen hat folgendes geschrieben Zum zitierten Posting springen:
Frage:
Bietet der Anbieter sowas wie eine Schnittstelle an oder muss Du auf einer (statischen) Seite die Daten auslesen?


Ich bin davon ausgegangen, dass ich mir da eine statistiche Seite suche.

Und wie komm ich an den code von der Seite??


Boldar - Do 22.12.11 00:07

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Hi und :welcome: im Forum.
Schau mal hier! [http://de.lmgtfy.com/?q=Wechselkurs+API]
mfg Boldar


Blawen - Do 22.12.11 00:08

Im Internetexplorer ist es --> Ansicht --> Quelle. Bei Firefox etc. wird es ähnlich sein.


Yogu - Do 22.12.11 00:11

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
Und wie komm ich an den code von der Seite??

Suche bei Google DELPHI DOWNLOLAD HTTP :idea:


Tilo - Do 22.12.11 00:12

N'abend Schosch,

Ich durfte als Einstiegstest etwas mit Aktienkurse machen. Bin dabei auf der Seite http://www.xignite.com fündig geworden.
WEchselkurse werden auch angeboten:
http://www.xignite.com/Products/Catalog.aspx#ForeignExchange

Abruf der Daten erfolgt nach Registrierung einfach per Webservice.


Schosch - Do 22.12.11 00:13

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Hi und :welcome: im Forum.
Schau mal hier! [http://de.lmgtfy.com/?q=Wechselkurs+API]
mfg Boldar


ich glaub ich werde mich da mal umsehen, danke schon mal im vorraus ^^

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconTilo hat folgendes geschrieben Zum zitierten Posting springen:
N'abend Schosch,

Ich durfte als Einstiegstest etwas mit Aktienkurse machen. Bin dabei auf der Seite http://www.xignite.com fündig geworden.
WEchselkurse werden auch angeboten:
http://www.xignite.com/Products/Catalog.aspx#ForeignExchange

Abruf der Daten erfolgt nach Registrierung einfach per Webservice.


also ich hab mir das grade angesehn und frage mich grade, ob das Kostenpflichtig ist. Denn ich bin wie gesagt im momen nur ein schüler, der nicht wirklich viele finanzielle Mittel zur verfügung hat..


Blawen - Do 22.12.11 00:39

Ja, ist es.
Es gibt zwar einen Testzugang, aber so wie ich gesehen habe, ist dieser auf 100 Abfragen beschränkt.
(Vermutlich werden die meisten Zugänge dieser Art (API) kostenpflichtig sein.)


Yogu - Do 22.12.11 00:46

user profile iconBlawen hat folgendes geschrieben Zum zitierten Posting springen:
Vermutlich werden die meisten Zugänge dieser Art (API) kostenpflichtig sein.

Die von Google jedenfalls nicht. Für eine Abschlussarbeit dürfte das allemal reichen.

Eine Beschreibung der API in PHP [http://www.techmug.com/ajax-currency-converter-with-google-api/], müsste man für Delphi umschreiben. Scheint aber nicht besonders kompliziert zu sein: Einfach z.B. folgende URL aufrufen:


Quelltext
1:
http://www.google.com/ig/calculator?hl=en&q=1 USD in EUR                    

Und man erhält folgendes:


Quelltext
1:
{lhs: "1 U.S. dollar",rhs: "0.76057195 Euros",error: "",icc: true}                    

Vielleicht findet sich ein fertiger JSON-Parser für delphi im Internet.


Schosch - Do 22.12.11 00:47

ok, ich habe insgesamt vier Wochen zeit, dann muss das Programm laufen. Währe hier das Arbeiten API´s sinnvoller? Wenn ja, wie benutze ich diese?


bummi - Do 22.12.11 00:47

Vielleicht könnte das was für Dich sein
http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html

>>> For Developers

also letztlich geht es darum diesen Link: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

per HTTP abzurufen und die Werte zu extrahieren


baka0815 - Do 22.12.11 12:43

Was den Zugriff auf statische (oder dynamische) Webseiten betrifft, such mal nach IdHTTP: Suche in: Delphi-Forum IDHTTP, Suche bei Google IDHTTP.


Schosch - Do 22.12.11 14:28

Gehn wir mal davon aus, dass ich mit kostenlosen APIs arbeite, wie musste ich die dann in das Programm einbasteln?


Nersgatt - Do 22.12.11 14:33

Also ich persönlich würde mich für den Tipp von Yogu entscheiden. Erscheint mir sehr einfach auszulesen, auch für eine Anfänger.
Gib mal den Link, den er geschrieben hat, direkt in der Adressleiste des Browsers ein. Dann kommt ganz einfach das Ergebnis, was er geschrieben hat.

Heißt für Dich:
Erst mal muss das Programm wissen, welche Kurse es überhaupt holen soll (welche Währungen). Entweder gibst Du das fest im Programm vor (z.B. Dollar, Pfund und Yen). Dann musst Du für jede Währung den Link entsprechend erstellen, und z.B. mit IdHttp den Kurs runterladen.

Wenn Du dann noch Zeit übrig hast, kannst Du das Programm noch erweitern. Z.B. dass der Benutzer selbst eingeben kann, welche Währungen er gern hätte (nicht mehr festcodiert).


bummi - Do 22.12.11 14:52

wobei IMHO, das folgende schon die halbe Miete wäre ... (Memo nur zur Demo)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.Button1Click(Sender: TObject);
var
 s:TStringStream;
begin
   s:=TStringStream.Create;
   try
     idHttp1.Get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',s);
     Memo1.Lines.Text := s.DataString;
   finally
     s.Free;
   end;
end;


Schosch - Do 22.12.11 15:57

user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:


Wenn Du dann noch Zeit übrig hast, kannst Du das Programm noch erweitern. Z.B. dass der Benutzer selbst eingeben kann, welche Währungen er gern hätte (nicht mehr festcodiert).


Genau dass ist eine Aufgabe, die ebenfalls zu erfüllen ist...

Genau Beschreibung der Aufgabe: Eine Auswahl mehrere Währungen ermöglichen, die in Euro umzurechnen sind. Und die gesammte summe (Dollar+Yen+.... ) in einem Ausgabe Feld als Euro ausgeben. Die wechselkurse müssen vor jedem aufrufen des Formulars aktualliesiert werden um sicher zu gehen, dass bei jedem benutzen des Programms die angaben auch korreckt sind.

Das is der Kern der Aufgabe und das plus noch ein paar kleine Furmularextras (die aber kein ding sind) muss erfüllt sein!!!


Nersgatt - Do 22.12.11 16:00

Dann mal frisch ans Werk! Ich denke, genug Hinweise zu Lösungsansätzen hast Du jetzt erst mal bekommen. Jetzt liegt es an Dir. :wink:


Schosch - Do 22.12.11 16:34

Glaube ich auch, Ich bedanke mich bei allen die mir geholfen haben ^^ Vielen Dank!!! Solte ich noch weitere Fragen haben wende ich mich wieder ans Forum...

MFG Schosch


Schosch - Do 26.01.12 18:43

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
wobei IMHO, das folgende schon die halbe Miete wäre ... (Memo nur zur Demo)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.Button1Click(Sender: TObject);
var
 s:TStringStream;
begin
   s:=TStringStream.Create;
   try
     idHttp1.Get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml',s);
     Memo1.Lines.Text := s.DataString;
   finally
     s.Free;
   end;
end;


@bummi

kannst du diesen Quellcode mal genauer definieren?? z.b. was ist hier 's' und wie würde die Klasse aussehen??


Narses - Do 26.01.12 19:24

Moin!

Ich weiß nicht genau, warum bummi den Quelltext so vorgeschlagen hat, aber die Indies liefern bei der .Get-Methode direkt einen String, also könnte man das etwas kürzer auch so machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm2.Button1Click(Sender: TObject);
begin
  try
    Memo1.Text := idHttp1.Get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
  except
    ShowMessage('Es ist ein Fehler aufgetreten!');
  end;
end;
Pack den Code doch einfach mal in einen Button-Handler und schau, was passiert. :idea: ;)

cu
Narses


Schosch - Do 26.01.12 19:29

der erkennt "idHttp1" nich, und weil ich noch nich genau weiß wie ich hier ne klasse einrichten muss, habe ich nachgefragt... weil ich mal denke, dass "idHttp1" ne Eigenschaft einer Klasse ist.. Also wie sollte denn die Ankündigung der Klasse aussehen??


jaenicke - Do 26.01.12 19:34

Du musst dafür die TIdHttp Komponente auf dem Formular haben. Oder du erstellst sie dynamisch:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
uses
  IdHttp;

var
  HttpLoader: TIdHttp;
  PageContents: String;
begin
  HttpLoader := TIdHttp.Create;
  try
    Memo1.Text := HttpLoader.Get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
  finally
    HttpLoader.Free;
  end;
end;


Schosch - Do 26.01.12 20:03

tjaa, jetzt kommt da diese fehlermeldung...

Unit1.pas(x,y) Fatal: Can't find unit idHttp used by Unit1

Moderiert von user profile iconNarses: Beiträge zusammengefasst

als bis jetzt hab ich die wechselkurse lokal drinn, also noch komplett ohne zusammenhang zur API....


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
var Eurowert: Array[0..9of real;
    Waehrungen: Array[0..9of real;

procedure TForm1.B_OKClick(Sender: TObject);
var Eingabeok: boolean;
begin
Eingabeok:=true;

// an dieser Stelle kommt eine Eingabe überpfüfung
// Wenn die Eingabe fehlerhaft ist (z.B Buchstaben anstatt zahlen.... wird Eingabeok auf false gesetzt...

  If Eingabeok=True then
     begin
       Eurowert[0]:=StrToFloat(TF_Australien.Text)/Waehrungen[0] ;
       Eurowert[1]:=StrToFloat(TF_China.Text)/Waehrungen[1];
       Eurowert[2]:=StrToFloat(TF_Canada.Text)/Waehrungen[2];
       Eurowert[3]:=StrToFloat(TF_DK.Text)/Waehrungen[3];
       Eurowert[4]:=StrToFloat(TF_GBr.Text)/Waehrungen[4];
       Eurowert[5]:=StrToFloat(TF_Indien.Text)/Waehrungen[5];
       Eurowert[6]:=StrToFloat(TF_Japan.Text)/Waehrungen[6];
       Eurowert[7]:=StrToFloat(TF_Schweden.Text)/Waehrungen[7];
       Eurowert[8]:=StrToFloat(TF_Schweiz.Text)/Waehrungen[8];
       Eurowert[9]:=StrToFloat(TF_USA.Text)/Waehrungen[9];
       Gesamt:=Eurowert[0]+Eurowert[1]+Eurowert[2]+Eurowert[3]+Eurowert[4]+Eurowert[5]+
               Eurowert[6]+Eurowert[7]+Eurowert[8]+Eurowert[9];

       TF_Euro.Text:=FloatToStrF(Gesamt, ffFixed, 102);
     end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

  Waehrungen[0]:=1.2332;      //Australien
  Waehrungen[1]:=8.2179;      //China
  Waehrungen[2]:=1.3129;      //Canada
  Waehrungen[3]:=7.4358;      //Dänemark
  Waehrungen[4]:=0.83625;     //Groß Britanien
  Waehrungen[5]:=65.0780;     //Indien
  Waehrungen[6]:=100.10;      //Japan
  Waehrungen[7]:=8.7791;      //Schweden
  Waehrungen[8]:=1.2061;      //Schweiz
  Waehrungen[9]:=1.3017;      //USA
end;


Narses - Fr 27.01.12 00:30

Moin!

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
tjaa, jetzt kommt da diese fehlermeldung...

Unit1.pas(x,y) Fatal: Can't find unit idHttp used by Unit1
Und, was könnte das wohl bedeuten? Schonmal einen Gedanken daran verschwendet, was dieses ominöse IdHTTP überhaupt sein soll? Sagt dir "Indy" irgendwas? Wie lange versuchst du schon, dich mit Delphi auseinanderzusetzen? Geht´s hier nur darum, eine (Schul-/Studium-/Sonstwas-)Aufgabe zu lösen und dann Adieu-Delphi? Oder soll die bisherige Herangehensweise tatsächlich zeigen, dass du ersthaft Interesse daran hast zu erlernen, was da passiert?

Bisher machst du c&p aus dem Forum in deinen Code, dann c&p der Fehlermeldung ins Forum - ohne weiteren erkennbaren Lösungsansatz deinerseits. Wie würdest du dich selbst einschätzen, wenn du an unserer Stelle wärst? :nixweiss:

cu
Narses


Andreas L. - Fr 27.01.12 11:05

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:


Unit1.pas(x,y) Fatal: Can't find unit idHttp used by Unit1


Entweder liegt IdHTTP nicht im Suchpfad oder die Indy Komponente sind nicht installiert. Hier kannst du die Komponenten gratis laden:

http://www.indyproject.org/Sockets/Download/Files/Indy10.DE.aspx

Installationsanleitung: http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=InstallUninstall.html

Wenn du die Komponenten installiert hast kannst du sie wie Jänicke schon schrieb verwenden:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
uses ..., IdHTTP;

...

var
  http: TIdHTTP;
  html: String;
begin
  http := TIdHTTP.Create(nil);
  try
    // Quelltext herunterladen
    html := http.Get('http://www.google.de/');  

    // Etwas mit html machen, z. B. deine benötigten Werte auslesen
  finally
    FreeAndNil(http);
  end;
end;


Schosch - Fr 27.01.12 12:33

was is eine Indy??? Also bis her hab ich schon mit Delphi befasst, aber der begriff Indy ist mir noch nicht untergekommen. Und ich habe auch vor weiterhin in dem Berreich der Programmierung zu agieren. Ich will hier ja auch was lernen, aber erstmal ist primär wichtig, dass ich so schnell wie möglich ne Lösung habe... ist ja auch nich so, dass ich sinnlos coppy and past mache, sondern ich versuche schon die angegebenen codes irgentwie sinnvoll einzubasteln... deswegen meine Frage, ob das was mit Klassen zu tun hat und wenn ja, wie diese klasse aussehen würde... aber jetzt kommt ihr mit Indy, was ich noch nie gehört habe... Ich hab ja gesagt, dass ich top-programmierer werden will, nich dass ich schon einer wäre... Und ich bin auch echt meeega dankbar für jede Hilfe.


jaenicke - Fr 27.01.12 12:45

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
was is eine Indy???
Eine Komponentensammlung für die Netzwerkkommunikation, die bei den meisten Delphiversionen bereits mitgeliefert wird.

In deinem Profil steht aber statt Delphi Lazarus. Was benutzt du denn nun, Delphi oder Lazarus? (Denn für Lazarus gibt es andere Komponenten...)


Schosch - Fr 27.01.12 13:20

Ich benutze Lazarus... Hab zwar mit Delphi7 angegfangen, doch als die schulelizenz sbgelaufen ist haben wir zu lazarus gewechselt, weil es halt ne freeware ist...


jaenicke - Fr 27.01.12 14:30

Da ich so gut wie gar nicht mit Lazarus arbeite, weiß ich nicht auswendig welche Komponenten es dafür gab. ICS oder so glaube ich z.B.

Bezüglich Indy für Lazarus siehe hier:
http://wiki.lazarus.freepascal.org/Indy_with_Lazarus


Schosch - Sa 28.01.12 17:40

was macht dieser Befehl??

FreeAndNil(http);

bzw. ..Create(nil);

... ich hab noch nie was von Nil gehört...


jaenicke - Sa 28.01.12 17:53

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
was macht dieser Befehl??

FreeAndNil(http);
Siehe Hilfe:
http://docwiki.embarcadero.com/VCL/de/SysUtils.FreeAndNil

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
... ich hab noch nie was von Nil gehört...
Nil heißt nichts, in diesem Fall wird nichts, also kein Owner, übergeben. Sprich, die erzeugte Komponente soll niemandem hören, da du dich um die Freigabe selbst kümmerst. Genau das passiert dann bei Free bzw. FreeAndNil, wobei letzteres bei lokalen Variablen nichts bringt.


MDX - Sa 28.01.12 19:40

Wie wärs mit "Hello World" als Abschlussarbeit? Wäre einfacher :D

Aber nein, jetzt mal im Ernst, benutz doch mal sowas wie ne Suchmaschine statt wegen jeder Kleinigkeit zu Fragen... :roll:


Martok - Sa 28.01.12 19:45

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
{...} bzw. FreeAndNil, wobei letzteres bei lokalen Variablen nichts bringt.
Doch, tut es, genauso wie bei Feldern.
Erklärung: FreeAndNil() hat gegenüber Free den Vorteil, dass nicht nur Free aufgerufen wird, sondern auch noch die Referenz auf nil gesetzt wird. Damit bekommt man in "Use-After-Free" (also "nutzen nach dem Freigeben")-Situationen ordentliche Fehlermeldungen, an denen man direkt erkennt dass auf ein nil-Objekt zugegriffen werden sollte.


(Konstruiertes) Beispiel:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var list: TStringList;
begin
  //...
  list:= TStringList.Create;
  try
    list.LoadFromFile('blubb.txt');
    //...
  finally
    list.Free;
  end;
  //...
  list.Add('Test');
  //...
end;

Das kann nicht funktionieren (programmiert man auch zugegeben eher selten bis gar nicht, wenn man etwas mitdenkt), aber in der Form bekommt man in der EAccessViolation eine Adresse genannt, die "irgendwo" im Speicher liegt. Verwendet man stattdessen in Zeile 9 FreeAndNil(list), wird man eine Adresse in der ersen Speicherseite bekommen und erkennt daraus direkt, dass ein Zugriff auf ein nil-Objekt erfolgt ist.


Für eine Einführung in die Sprache wird immer wieder gerne auf den Crashkurs von Christian Stelzmann [http://www.christian-stelzmann.de/artikel/CrashkursReloaded/] verwiesen. Mach ich dann hier auch mal ;)


Schosch - Sa 28.01.12 22:37

also langsam aber sicher nähere ich mich der endgültigen lösung... Doch so ein paar kleinigkeiten lassen mich immernoch verzweifel.

Also wenn ich jetzt diese Indy heruntergeladen und installiert habe erkennt der dann in der uses-klausel "IdHTTP"?
wenn nein muss ich was machen, damit der das erkennt????



Ich hab mir auch mal diese Seite hier angeguckt:

http://wiki.lazarus.freepascal.org/XML_Tutorial/de#Erzeugen_einer_XML-Datei

dort finde ich ebenfalls angaben die Lazarus nicht kennt, wo aber nicht beschrieben wird, wieso und wass ich tun muss damit sich das ändert... (Bsp: var Doc: TXMLDocument; )


MDX - Sa 28.01.12 23:53

Zitat:
Nachfolgend ist der komplette Code für das Schreiben in eine XML-Datei. (Er wurde einem Tutorial des DeveLazarus-Blogs entnommen.) Bitte denken Sie an den Verweis auf die Bibliotheken DOM und XMLWrite in der 'uses'-Klausel.


Wer lesen kann ist klar im Vorteil....


Schosch - Mo 30.01.12 18:47

user profile iconMDX hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Nachfolgend ist der komplette Code für das Schreiben in eine XML-Datei. (Er wurde einem Tutorial des DeveLazarus-Blogs entnommen.) Bitte denken Sie an den Verweis auf die Bibliotheken DOM und XMLWrite in der 'uses'-Klausel.


Wer lesen kann ist klar im Vorteil....


ja okee, mein fehler :oops:

abber dennoch beantwortet das noch nich meine Indy frage... Wenn ich die jetzt installiert habe sind dann die Probleme und Fehlermeldungen weg, oder muss ich noch irgentwas machen, damit "IdHttp" erkannt wird???


MDX - Mo 30.01.12 19:44

IdHTTP Komponente auf die Form ziehen.


Schosch - Mo 30.01.12 22:55

achsoo, also welche indy soll ich denn laden? Indy 9 oder indy 10, und sind die kostenpflichtig??


MDX - Mo 30.01.12 23:21

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
achsoo, also welche indy soll ich denn laden? Indy 9 oder indy 10, und sind die kostenpflichtig??


Die Version, die zu deiner Delphi-Version kompatibel sind. AM besten die neuste. Und nein, sind sie nicht, steht auch auf der Homepage.


Schosch - Di 31.01.12 11:37

gut, ich hab mir jetzt die Indy 10... gelanden und versucht, die wie hier: http://www.youtube.com/watch?v=PC7y2gS-vhs
zu installiere, dann sagt der mir aber dass der die datei componenttreeview.pas nich finden kann.

Ich habb alles genauso gemacht wie beschrieben, wie also kann ich diesen fehler beheben??


jaenicke - Di 31.01.12 11:40

Suche bei Google COMPONENTTREEVIEW.PAS
--> http://www.lazarus.freepascal.org/index.php?topic=10984.0


Schosch - Di 31.01.12 18:57

Damit kann ich nich besonders viel anfangen, vielleicht auch nur weil ich nixht besonders gut in Englisch bin :D
ne, ich habs so versuch wie der eine gesagt hat mir einfach mehrmals versuchen (hat nich geklapt)
ich hab nach clean up + Build All gesucht und nich gefunden
und den rest hab ich nich verstanden...

Eventuell hab ich auch nur ne fehlerhafte version von Indy 10... hat jemand vielleicht nen Link am Start, wo ich mit sicherheit kostenfrei eine funktionierende und vollständige Indy 10 laden kann??


Blawen - Di 31.01.12 23:48

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
Damit kann ich nich besonders viel anfangen, vielleicht auch nur weil ich nixht besonders gut in Englisch bin :D
ne, ich habs so versuch wie der eine gesagt hat mir einfach mehrmals versuchen (hat nich geklapt)
ich hab nach clean up + Build All gesucht und nich gefunden
und den rest hab ich nich verstanden...

Eventuell hab ich auch nur ne fehlerhafte version von Indy 10... hat jemand vielleicht nen Link am Start, wo ich mit sicherheit kostenfrei eine funktionierende und vollständige Indy 10 laden kann??
Du kannst Die Seite ja auch mit Google übersetzen lassen.
So wie es aussieht, ist nicht Indy 10 direkt "Schuld". Hast Du es schon mit der 9er Version ausprobiert?


Schosch - Mi 01.02.12 09:29

user profile iconBlawen hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst Die Seite ja auch mit Google übersetzen lassen.
So wie es aussieht, ist nicht Indy 10 direkt "Schuld". Hast Du es schon mit der 9er Version ausprobiert?


Ich hab auch versucht die Indy 9 zu Installieren, aber da ich keine entsprechende Installations anleitung gefundenhabe vür indy9 und Lazarus hab ich versuch das selber irgentwie hinzukriegen, da kam aber nur ein großer haufen von Fehlermeldungen...

wenn du eine Anleitug hast, würde ich es begrüßen, darauf zugreifen zu dürfen ^^


JuniorProgrammierer86 - Do 02.02.12 13:51

was denn für fehlermeldung?? sofern der pc net ausgeht is alles im kirschgrünen bereich^^


Schosch - Fr 03.02.12 12:54

So, ich habs jetzt endlich gebacken bekommen die Indy zu installieren... Keine Ahnung wie, aber auf einmal gings :D :D
Jetzt versuche ich erstmal mein Programm fertig zu stellen, sollte ja jetzt kein Problem mehr sein ^^


Schosch - Fr 03.02.12 18:59

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
So, ich habs jetzt endlich gebacken bekommen die Indy zu installieren... Keine Ahnung wie, aber auf einmal gings :D :D
Jetzt versuche ich erstmal mein Programm fertig zu stellen, sollte ja jetzt kein Problem mehr sein ^^


Ich hab mich geirrt -.-

wie kann ich denn auf die einzelnen Knoten in der API

http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

zugreifen... also Ich kann bissher den gesamten Text in ein Memo oder Editfeld usw. ausgeben.. aber ich weiß nich wie ich nur bestimmte Werte aus dem Text bekomme...


Blawen - Sa 04.02.12 00:07

user profile iconSchosch hat folgendes geschrieben:
wie kann ich denn auf die einzelnen Knoten in der API

http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

zugreifen... also Ich kann bissher den gesamten Text in ein Memo oder Editfeld usw. ausgeben.. aber ich weiß nich wie ich nur bestimmte Werte aus dem Text bekomme...
Die Strategie ist eigentlich eine ganz einfache. Du kannst z.B. den Text nach den Schlüsselwörtern durchsuchen und die eingelesenen Werte in eine Tabelle übernehmen.


Schosch - Sa 04.02.12 01:07

ja das hab ich mir auch schon gedacht, ich hab mir ja wie schon gesagt die Seite:

http://wiki.lazarus.freepascal.org/XML_Tutorial/de#Lesen_eines_Textknotens

angeguckt und in dem Abschnitt "Einlesen eines TextKnotens" ist von dem Befehl "ReadXMLFile(...)" die Rede. Das habe ich ausprobiert und es klapt nicht. Weil Lazarus diesen Befehl nicht erkennt (Fehlermeldung: Indentifire not found "ReadXMLFile"...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.FormCreate(Sender: TObject);
var PassNode :TDOMNode;
    API: TIdHttp;
    Doc: TXMLDocument;
begin
  B_New.Click;
  Doc.Create;
  API:=TIdHTTP.Create;

  API.Get('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
  ReadXMLFile(Doc,API); 

  API.Free;
  Doc.Free;
end;


jaenicke - Sa 04.02.12 04:45

Vermutung (weil dort XMLWrite weiter unten steht):
Du musst die Unit XMLRead in die uses schreiben.


Blawen - Sa 04.02.12 13:10

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
ja das hab ich mir auch schon gedacht, ich hab mir ja wie schon gesagt die Seite...
Wo Du dies genau gesagt hast, weiss ich nicht. Aber darum gilt im Normalfall ja auch: Andere Frage - neuer Thread (Thema). Dies macht es für alle übersichtlicher.


Schosch - Sa 04.02.12 14:11

Ah ok, hätte ich mir auch eigentlich denken können...

Aber jetzt kommt diese Fehlermeldung:

Unit1.pas(722,22) Error: Incompatible type for arg no. 2: Got "TIdHTTP", expected "TStream"

wie muss ich denn die Rückgabetyp-Umwandelung gestalten, dass der erkennt dass die API das einzulesende XML-Dokument ist??


jaenicke - Sa 04.02.12 14:25

user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
wie muss ich denn die Rückgabetyp-Umwandelung gestalten, dass der erkennt dass die API das einzulesende XML-Dokument ist??
Naja, bis jetzt schmeißt du ja die geladene Seite einfach weg. Schau dir einmal den zweiten Parameter von Get an. Da kannst du einen TMemoryStream übergeben und den dann wiederum an die XML-Funktion übergeben.


Schosch - Sa 04.02.12 14:55

user profile iconBlawen hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconSchosch hat folgendes geschrieben Zum zitierten Posting springen:
ja das hab ich mir auch schon gedacht, ich hab mir ja wie schon gesagt die Seite...
Wo Du dies genau gesagt hast, weiss ich nicht. Aber darum gilt im Normalfall ja auch: Andere Frage - neuer Thread (Thema). Dies macht es für alle übersichtlicher.


Hasde eigentlich recht, ich mach dan mal nen neuen Thread auf... Dann nochmals vielen Dank an alle ;)