leeren String ins ListBox finden



  • Joe_M. schrieb:

    Und was hat das mit dem Problem zu tun?!? Es geht hier nicht um std:string, sondern um TStrings aus der VCL.

    Naja nicht ganz. 😉
    Es geht hier darum den Index von einem leeren (VCL) String Eintrag in einer (VCL) TStringList zu finden.
    Dies könnte man auch mit Hilfe eines std::string machen.



  • Tja kann man, aber warun sollte man? Mit VCL-Mitteln ist wäre das ohne weitere Header einbinden zu müssen, weniger Tipparbeit und ohne die ganze Konvertiererei möglich - wenn man denn eine eigene IndexOf-Funktion schreiben und nutzen möchte.

    So wie ich das sehe, ist der Code auch fehlerhaft und liefert, unter bestimmten Bedingungen, ein falsches Ergebnis.



  • Joe_M. schrieb:

    Tja kann man, aber warun sollte man? Mit VCL-Mitteln ist wäre das ohne weitere Header einbinden zu müssen, weniger Tipparbeit und ohne die ganze Konvertiererei möglich - wenn man denn eine eigene IndexOf-Funktion schreiben und nutzen möchte.

    So wie ich das sehe, ist der Code auch fehlerhaft und liefert, unter bestimmten Bedingungen, ein falsches Ergebnis.

    1.Ja genau. Man kann es, müssen tut man nichts. 😉 😃
    Es ist nur eine Option von vielen.
    Genausogut ist das Beispiel mit der Schleife absolut nicht optimal.

    2.Der Code ist nicht fehlerhaft und funktioniert ohne Probleme.



  • Er ist fehlerhaft. Teste ihn doch mal mit einem leeren String als letztem Eingrag...



  • flohh schrieb:

    Genausogut ist das Beispiel mit der Schleife absolut nicht optimal.

    Hmm, du meinst das Beispiel mit dem SendMessage-Aufruf? Was gefällt dir daran nicht?
    Es kommt auf das Verständnis/die Intelligenz des Programmieres an, es für seine Zwecke zu nutzen.
    Die Schleife gibt alle Strings mit einer Länge von 0 (Null) Zeichen aus. Ein while täte es auch...
    Gut, die Messagebox hats umsonst.
    Der Code ist korrekt, kürzer als dein Beispiel und vermutlich schneller in der Ausführung.
    Im übrigen schliesse ich mich Joe_M. an.



  • Ich denke mal es geht um die fehlende Abbruchbedingung, da IndexOf ja auch nur das erste vorkommen liefert.



  • confjoe schrieb:

    Ich denke mal es geht um die fehlende Abbruchbedingung, da IndexOf ja auch nur das erste vorkommen liefert.

    Die Schleifenfunktion, um dies geht, hat nix mit der Funktion IndexOf gemein und braucht keine Abbruchbedingung,

    da sie durch alle Items iteriert (ListBox1->Items->Count). Und Count ist bekannt.

    mfg
    kpeter



  • kpeter schrieb:

    confjoe schrieb:

    Ich denke mal es geht um die fehlende Abbruchbedingung, da IndexOf ja auch nur das erste vorkommen liefert.

    Die Schleifenfunktion, um dies geht, hat nix mit der Funktion IndexOf gemein und braucht keine Abbruchbedingung,

    da sie durch alle Items iteriert (ListBox1->Items->Count). Und Count ist bekannt.

    mfg
    kpeter

    Das ist quark. Die Schleife bräuchte natürlich eine Abbruchbedingung beim ersten Fund eines leeren Eintrages. 😉



  • confjoe schrieb:

    Das ist quark.

    🤡

    confjoe schrieb:

    Die Schleife bräuchte natürlich eine Abbruchbedingung beim ersten Fund eines leeren Eintrages. 😉

    Dann bau sie ein! Mit meinem obigen Code war nicht beabsichtigt, den ersten, sondern alle leeren Einträge zu finden.

    mfg
    kpeter



  • ja also. 🤡
    Um ein entsprechendes Pendant zu IndexOf zu haben braucht man das halt.
    Darum gehts doch nur.



  • Nö, wenn man es genau nimmt, ging es nicht darum. Es ging darum, warum TStrings::IndexOf() keine leeren Einträge findet. 😉

    Die einfachste Lösung ist und bleibt, einfach ein Leerzeichen, statt eines leeren Strings einzutragen. Wobei sich mir der Sinn eines leeren Eintrags in einer ListBox immer noch nicht erschlossen hat. 🤡


Anmelden zum Antworten