Stringverarbeitung



  • @junix: Wenn wir schon beim Klugscheißen sind, dann auch richtig. 😉

    Ich habe bewusst weder C noch C++ gesagt, sondern C/C++.

    Denn die Hilfe sagt eindeutig:

    char *strstr(const char *s1, const char *s2);                /* nur C */
    const char *strstr(const char *s1, const char *s2);          // nur C++
    char *strstr(char *s1, const char *s2);                      // nur C++
    

    Ansonsten ist deine Begründung natürlich auch richtig. 🙂

    [ Dieser Beitrag wurde am 05.05.2003 um 15:44 Uhr von Eßer editiert. ]



  • btw wenn ich euch mal eben kurzz beim Klug******* unterbrechen dürfte 🙄 : AnsiContainsStr benötigt genau wie die meisten komplexeren Stringmanipulationsmethoden StrUtils.hpp
    deshalb kennt er das nicht.

    [ Dieser Beitrag wurde am 06.05.2003 um 08:08 Uhr von dreaddy editiert. ]



  • *g*

    ihr seit ein paar Nasen 😃 🙂



  • AnsiContainsStr ist bei bcb5pro noch nicht dabei und die sysutils.hpp ist bereits in der vcl.h inkludiert!



  • Wie kann ich jetzt beispielsweise eine Suche mit "Pos" wiederholen?
    In der Hilfe steht das Beispiel...

    AnsiString  S = "   123.5";
    int p;
     // Leerzeichen in Nullen konvertieren 
    while ((p = S.Pos(' ')) > 0 )
      S[p] = '0';
    

    Funktioniert ja auch recht gut. Nur...
    wenn ich nun diese Funktion etwas umbaue, so das mir das Programm den Dateipfad angibt, läuft mir der Compiler in eine Endlos-Schleife:

    AnsiString Datei = Application->ExeName;
    String Pfad;
    int p;
    while ((p = Datei.Pos('\')) > 0 )
    Pfad = Datei[p];

    😕



  • Und dies hier wiederholt die ganze Sache leider nicht:

    String  Datei = Application->ExeName;
    String Pfad;
    int p;
    int w = 0;
    while ((p = Datei.Pos('\\')) > 0 && w<Datei.Length())
    {
      Pfad = Datei;
      Pfad.SetLength(p);
      w++;
    }
    //Das Programm hört nach dem ersten "Fund" auf.
    


  • Ich blick nicht durch...... Was soll dir die Schleife bringen?
    Ich meine Pfad ist doch immer gleich ( da sich "p" ja nicht verändert, da du ja
    an "Datei" auch nichts änderst??? ).........
    MFG Aoeke

    [ Dieser Beitrag wurde am 05.05.2003 um 19:23 Uhr von Aoeke editiert. ]



  • Ach so, also...

    Application->ExeName ist doch der Dateinamen der *.exe: Bsp.: C:\Eigene Dateien\Projekt1.exe

    Wenn ich jedoch den Pfad haben möchte:
    C:\Eigene Dateien\

    Also muss ich doch nach dem letzten "\" suchen und alles was dannach noch folgt untern Tisch fallen lassen.
    Oder gibt es da eine leichtere Variante?



  • mensch mensch mensch... nimm mal das brett vor deinem kopf weg!

    bcb starten, F1 drücken, ExtractFilePath oder ExtractFileDir eintippen, und lesen was da steht!

    p.s. nächstes mal gleich kopf einschalten...



  • Das geht ja einfach! 🙄

    Danke!



  • Original erstellt von Sunday:
    AnsiContainsStr ist bei bcb5pro noch nicht dabei und die sysutils.hpp ist bereits in der vcl.h inkludiert!

    also bei mir ist:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      AnsiContainsStr("hallo", "ha");
    }
    
    [C++ Fehler] Unit1.cpp(20): E2268 Aufruf der undefinierten Funktion 'AnsiContainsStr'
    

    im Gegnsatz dazu läuft

    #include "StrUtils.hpp"
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      AnsiContainsStr("hallo", "ha");
    }
    

    problemlos durch, könnte dadran liegen das Sysutils != StrUtils 😛

    Ausserdem hat er die Methode wie er schreibt in der Hilfedatei gefunden(ich denke mal in seiner) also hat er auch BCB6.

    [ Dieser Beitrag wurde am 06.05.2003 um 08:16 Uhr von dreaddy editiert. ]


Anmelden zum Antworten