Entwickler-Ecke

Jobbörse - PHP nach Delphi übersetzen


Stefan-W - Mi 31.05.06 14:45
Titel: PHP nach Delphi übersetzen
Hi, ich brauch mal eine helfende Hand beim übersetzen einer Funktion von PHP nach Delphi.

ich hoffe da kann mir jemand helfen...

Ich will einen Anrufmonitor für unsere FritzBox programmieren und da soll dann statt der Nummer dier Name angezeigt werden. Ich hab den Code aus der DP, und kann ihn nur nicht übersetzen.


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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
<?php

//
// Inverssuche via 'dasoertliche.de'
//
// Copyright (c) 2005 Peter J. Schneider
// www.raketenwerfer.de
//


define("NL", "\n");


function get_name_by_number($number) {
  $url = 'http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm'.
    '?main=Antwort&AKTION=START_INVERS_SUCHE&SEITE=INVERSSUCHE_V'.
    '&s=2&rg=1&taoid=&si=&SKN=0&kw_invers='.
    urlencode($number);

  // Abfrage
  $file = fopen ($url, "r");
  if (!$file) {
    exit;
  }
  while (!feof ($file)) {
    $line = fgets ($file, 1024);
    if (eregi ("<a class=\"blb\"(.*)</td>", $line, $out)) {
      $result = $out[1];
      break;
    }
  }
  fclose($file);

  // Prä parsen
  $result = substr($result, strpos($result,  '>')+2);

  $vor_array = explode('</a><br>', $result);  // 0 : Name
                        // 1: Anschrift
  
  $vor_array2 = explode(', ', $vor_array[1]); // 0: Straße
                        // 1: PLZ / Ort

  return array($vor_array[0], $vor_array2[0], $vor_array2[1]);
}



$result = get_name_by_number($_GET['number']);

echo $result[0].NL;
echo $result[1].NL;
echo $result[2]; 

?>

sind nur ca 20 Zeilen (ohne Komentare)

Würd mich freuen wenn mir jemand hilft
Tschau Stefan


Moderiert von user profile iconAXMD: Topic aus Sonstiges (Delphi) verschoben am Do 01.06.2006 um 19:02


Stefan-W - Do 01.06.06 17:59

gut da es einige gab die hier zwar reichgeschaut haben aber nix posteten, denk ich mal so einfach seit ihr nicht zu überzeugen, mir hierbei zu helfen ;-) :lol:
gut mir ist die Sache nun mitlerweile soviel wert, dass ich mich entschlossen habe euch einen kleinen Unkostenbeitrag zukommen zu lassen, ich denk da so an 5€ da es ja nur ca 20 Zeilen sind.
Würd mich freuen wenn mir jemand helfen kann. :flehan:

Tschau Stefan


delfiphan - Do 01.06.06 18:31

Spende das Geld doch lieber für einen guten Zweck ;)
Jedenfalls würde ich sowas aber nicht in ein Programm einbauen; wenn das Design der Seite ändert funktioniert das ganze nämlich nicht mehr.

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:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
uses IdHTTP, IdException;

type
 ENotFound = class(Exception);
 TAddress = record
  Name, Anschrift, PLZ_Ort: String;
 end;

function get_name_by_number(Number: String): TAddress;
 procedure Error;
 begin
  raise ENotFound.Create('Incorrect format');
 end;
var
 Answer, A1, A2: String;
 I: Integer;
begin
  with TIdHTTP.Create do
   try
    Answer := Get('http://www.dasoertliche.de/DB4Web/es/oetb2suche/home.htm?main=Antwort&AKTION=START_INVERS_SUCHE&SEITE=INVERSSUCHE_V&s=2&rg=1&taoid=&si=&SKN=0&kw_invers='+Number);
    I := Pos('class="blb"',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, I, Length(Answer)-I+1);
    I := Pos('>',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, I+1, Length(Answer)-I);
    I := Pos('</td>',Answer);
    if I = 0 then Error;
    Answer := Copy(Answer, 1, I-1);
    I := Pos('</a><br>',Answer);
    if I = 0 then Error;
    A1 := Copy(Answer, 1, I-1);
    A2 := Copy(Answer, I+8, Length(Answer)-(I+8-1));
    I := Pos(',',A2);
    if I = 0 then Error;
    Result.Name := Trim(A1);
    Result.Anschrift := Trim(Copy(A2, 1, I-1));
    Result.PLZ_Ort := Trim(Copy(A2, I+1, Length(A2)-I));
   finally
    Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Adresse: TAddress;
begin
  try
  Adresse := get_name_by_number('04394610'); // irgend ne Nummer
  ShowMessage(Adresse.Name+#13+Adresse.Anschrift+#13+Adresse.PLZ_Ort);
  except
   on E:ENotFound do
     MessageDlg('Fehler beim Nachschlagen.', mtError, [mbOk], 0);
   on E:EIdException do
     MessageDlg('Fehler bei der Verbindung.', mtError, [mbOk], 0);
  end;
end;


Stefan-W - Do 01.06.06 18:41

Ah wunderbar :D da kann ich nachher gleich weiter arbeiten :D *WieSauFreu*

ich hätte dir angeboten dir das Geld zu überweisen

Nochmal vielen Dank

Tschau Stefan


digi_c - Fr 02.06.06 07:16

Kannst es unseren Admins überweisen für den Traffic des Forums ;)