AnsiString nach Kriterium teilen [gelöst]



  • Hallo

    nimm statt fgets() und Konsorten für Dateibehandlung lieber std::ifstream und std::string oder TStringList und AnsiString.
    Ersteres ist Standard-C++ und wird im C++ Forum behandelt, also dort suchen, am besten in der FAQ anfangen. Es gibt ein Thema namens Dateien und Ströme.
    Zweiters ist VCL, und auch dazu findest du genug im Forum.

    Das was du benutzt ist veraltetes C, das du auf einen modernen Compiler ohne Not nicht mehr einsetzen solltest.

    bis bald
    akari



  • Gibt es nicht eventuell eine einfachere Lösung als das komplette Programm zu verändern???



  • Hallo

    Ansonsten must du die Funktion strncpy() verwenden.

    Schau in der BCB-Hilfe zu dieser Funktion nach, da ist auch ein Beispiel drin.

    bis bald
    akari



  • Habs jetzt erstmal hinbekommen, nicht schön aber selten... werd ich bei Gelegenheit ma an die genannten Punkte anpassen!

    thx, MFG
    dope_dope



  • Noch ein Hinweis: wenn du ausdrücklich keine VCL und andere BCB-Spezialitäten verwenden willst dann gehören deine Fragen in's ANSI C bzw. C++-Forum, oder ggf. in's Konsolen-Forum.
    Hier geht es um den BCB und seine Besonderheiten.



  • Nochmal eine etwas andere Frage:

    Ich habe einen String
    "bla test"

    Jetzt möchte ich diesen string am leerzeichen abschneiden und benötige nur den ersten Teil, also in dem fall "bla".

    Es bringt mir nichts die Zeichen zu zählen, es muss am Lerrzeichen getrennt werden! Welche Funktion ´kann ich benutzen???



  • Hallo

    Ähm, was glaubst du wurde im dem Thread so ausführlich plattgewalzt? Wie man Zeichen sucht und Strings trennt! Also benutz genau die Funktionen, die genannt wurden, und stell die etwas um.

    bis bald
    akari



  • Was soll man sagen:

    - keine Zeit hat er
    - er hat eine Lösung gefunden
    - die funktioniert mit Leerzeichen nicht?
    - er weiss nicht, das AnsiString und TStringList nun auch in einer Konsole gehen
    - entsprechende Routinen wurden gezeigt

    Bleibt nur noch -> *kopfschüttel*



  • Mal abgesehen davon wurde das hier schon unzählig oft durchgekaut.
    In der Suche mal einfach "Seperator" eingeben ...



  • dope_dope schrieb:

    das hindert mich.
    while(fgets(zeile, 99, f) != NULL)
    {...

    hast du vielleicht ein beispiel???

    ich hoffe du meinst das

    void get()
    {
            char data[1000];
            while(strncmp("quit", data, 4)==!0 && strncmp("exit", data, 4)==!0)
                    gets(data);
    }
    


  • Nachdem ich mein Programm angepasst habe, bin ich zu folgenden Lösungen gekommen:

    Erstes Problem ("Hans\Wurst" sollte so geteilt werden, dass nur noch "Wurst" übrig bleibt):

    AnsiString var_Username="Hans\Wurst";
    
    char * pch;                                   
    pch = strtok (var_Username.c_str(),"\\");     
    
    while (pch != NULL)                           
    {                                             
    	strcpy (var_Username.c_str(),pch);
    	pch = strtok (NULL, " ,.");
    }
    

    Zweites Problem ("Bla Test" sollte so geteilt werden, dass nur noch "Bla" übrig bleibt):

    AnsiString var_Text="Bla Test";
    
    char * pch; 
    pch = strtok (var_Text.c_str()," "); 
    
    strcpy (var_Text.c_str(),pch);
    

    THX an alle Beteiligten!



  • Wo wird den Speicher für char* pch reserviert und wieder freigegeben? Und es ist dir bewußt, dass bei der ersten Verwendung von pch ein int besser geeignet wäre?

    Und da Du doch schon AnsiString verwendest, warum verwendest Du nicht dessen Methoden AnsiPos() und SubString()?



  • Weil er nicht hören will/kann -> lies den ganzen Thread



  • Könnt ihr mir nicht mal bitte eins meiner Beispiele mit AnsiPos und Substring umschreiben???
    Wär echt super!



  • Hallo

    AnsiString var_Username="Hans Wurst"; 
    int Pos = var_Username.Pos(" ");
    AnsiString Vorname;
    if (Pos > 0)
    {
      Vorname = var_Username.SubString(1, Pos -1);
      var_Username.Delete(1, Pos);
      }
    

    Die Erklärungen kannst du dir selber aus dieser Übersicht rausholen

    bis bald
    akari



  • Habe dir bereits zu Anfang eine universelle Funktion gezeigt!


Anmelden zum Antworten