Toplevel Domain auslesen...



  • Hallo,

    folgendes Problem. Ich lese über ein Edit Feld eine Domain ein. So, jetzt brauche ich davon nur die toplevel Domain, wie z.B. "com" bei "threedy.com". Leider funzt das alles nicht so wie es soll, ich poste mal meine Funktion.

    bool parsetoplevel;
        Char toplevel[100];
        domain = Edit1->Text.c_str();
    
        int length = StrLen(domain);
    
        for(int i = 0; i < length; i++)
        {
            if(domain[i] == '.')
                parsetoplevel = true;
    
            if(parsetoplevel == true)
            {         
                char t = domain[i+1];
                strncat(toplevel, t, 100);
            }
        }
    

    domain ist char*. Kenne mich mit Strings und Chars leider noch nicht so aus.

    Bye



  • Die Fehlermeldungen lauten:

    [C++ Fehler] Unit1.cpp(39): E2034 Konvertierung von 'int' nach 'const char *' nicht möglich

    [C++ Fehler] Unit1.cpp(39): E2342 Keine Übereinstimmung des Typs beim Parameter '__src' ('const char *' erwartet, 'char' erhalten)



  • String domain = Edit1->Text;
    int pos = domain.LastDelimiter(".");
    String tl_domain = domain.SubString(pos + 1, domain.Length() - pos);
    

    Zur Funktionsweise bitte in der Hilfe zu AnsiString und dessen Methoden nachlesen.



  • Danke, es funzt!!

    jetzt habe ich aber ein weiteres Problem....

    Ich will anhand dieser Domain dann den Whois Server auswählen (schreibe ein Whois Programm mit Indy). Das mache ich so:

    IdWhois1->Host = resolvehost(tl_domain);
            RichEdit1->Text = IdWhois1->WhoIs(domain);
    

    die resolvehost Funktion sieht so aus:

    AnsiString TForm1::resolvehost(AnsiString toplevel)
    {
        if(toplevel == "de")
            return "whois.denic.de";
        else if(toplevel == "com")
            return "whois.internic.com";
    
    }
    

    So, aber es geht nicht! Er nimmt immer den Host den ich im Objektinspektor eingestellt habe. Auch wenn ich direkt am Anfang z.B. einstelle ändert er es nicht, warum? Hab es in einem anderen Programm ausprobiert, immer wenn ich einen Button gedrückt habe, hat sich der Host geändert.

    Ich bin mit meinem Latain bald am Ende.

    Cya



  • Keiner ne Idee?

    Cya



  • Atens hat das nicht wirklich mit der ursprünglichen Frage zu tun (Faustregel: ein Thema pro Thread, ein Thread pro Thema).

    Und Btens: hast du dich denn schon mal systematisch auf die Fehlersuche gemacht? Also das Programm per Debugger schrittweise ablaufen lassen und z.B. geprüft, welchen Inhalt toplevel zur Laufzeit tatsächlich hat?



  • zu 1: Sorry, aber ich wollte nicht wegen jedem pipifax ein neis Thema aufmachen und das Forum zumüllen.

    zu 2: ja, und toplevel hat den wert de bei de domains und com bei com domains, usw. Er bekommt auch den richtigen Host zugewisen, aber nimmt ihn nie an. NUr den default Wert der im Objektinspetor steht.

    Cya



  • Wenn das Pipifax wäre würdest du doch nicht extra das Forum bemühen, oder? 😉

    Zur Sache: das Problem kann ich nachvollziehen. Vermutlich wird die nachinstallierte Indy-Version (hier 9.00.14) durch Rest-Dateien aus dem zum Lieferumfang des BCB6 gehörenden Indy-Paket beeinflusst. Bei einem Vergleichstest mit einer "sauberen" BCB5-Installation funktionierte der Hostwechsel bei IdWhois problemlos.

    Welche Dateien genau den Fehler verursachen habe ich (noch) nicht untersucht, als quick+dirty Workaround könntest du für jeden Whois-Server eine eigene Komponente auf die Form packen.
    Das Erstellen von IdWhois-Instanzen zur Laufzeit bringt leider keine Abhilfe. Im Gegenteil, dabei zeigen sich noch mehr Fehler, z.B. wird die Eigenschaft ReadTimeout nicht mehr erkannt.



  • hmm, das wäre ne lösung, aber etwas aufwendig bei mehr als 100 Servern.

    Die alte Indy Version habe ich bei der Installation von Borland deaktiviert.

    Cya



  • Scheinbar reicht das nicht aus. Zum Thema "Indy de-/installieren" gibt es aber etliche Threads, in denen auch das Löschen bestimmter Dateien diskutiert wird. Eventuell findest du da ja eine Lösung.


Anmelden zum Antworten