TListBox Save/Load problem!



  • Sieh dir den von IdHTTP gelieferten String mal im Debugger an (per CodeInsight oder Watch). Bei einem Linux/Unix-Server steht '\n' für die Zeilenumbrüche, bei einem Windoof-Server steht da vermutlich '\r\n'. Bevor du den String an die ListBox weiterreichst könntest du zB. per StringReplace() alle Zeilenümbrüche durch Leer-Strings ersetzen, also löschen.



  • Hi,

    Das mit StringReplace() klingt interessant 🙂
    Ich versuche das grad so:

    String Source = http->Get("http://www.domain.com/datei.htm");
        StringReplace(Source,"\r\n","",rfIgnoreCase & rfReplaceAll);
    

    das klappt aber nicht wirklich 🙂
    [C++ Fehler] Unit1.cpp(26): E2034 Konvertierung von 'int' nach 'TReplaceFlags' nicht möglich
    [C++ Fehler] Unit1.cpp(26): E2342 Keine Übereinstimmung des Typs beim Parameter 'Flags' ('TReplaceFlags' erwartet, 'int' erhalten)

    die parameter habe ich aber aus der hilfe 😕



  • Es gibt 2 Möglichkeiten, entweder so:

    TReplaceFlags RF;
    
    RF << rfIgnoreCase << rfReplaceAll;
    Source=StringReplace(Source, "\r\n", "", RF);
    

    oder so 😉

    Source=StringReplace(Source, "\r\n", "", TReplaceFlags() << rfIgnoreCase << rfReplaceAll);
    

    Wobei Du in diesem Fall rfIgnoreCase nicht wirklich brauchst, oder ?

    [ Dieser Beitrag wurde am 29.05.2003 um 17:27 Uhr von Peter editiert. ]



  • Danke! 🙂
    Wenn ich jetzt aber SaveToFile ausführe, kommt diese böse meldung:

    "Zugriffsverletzung bei Adresse 77F424F2 in Modul 'ntdll.dll'. Schreiben von Adresse 00130000

    woran kann das liegen? mein system und somit BCB ist erst grad frisch aufgespielt 😕



  • Es ist eher unwahrscheinlich, dass das von dem hier diskutierten Code verursacht wird. Evtl. hilft es, den BCB und ggf. Windows neu zu starten.



  • reboot bringt nichts. ich sehe es liegt an dem string, also den html code. wenn ich normalen text speichere also z.B. "blaah blubb glugg blabberiblubb" geht es. wieso aber nicht mit dem html string... hmmm



  • Welche URL hast du denn abgerufen?



  • Hi,

    kannst du oderjemand anderes, mal bitte versuchen?
    mit indy oder so,
    TListBox Save/Load problem!

    in ein listbox item laden. dann SaveToFile.



  • Funktioniert hier einwandfrei.



  • echt? also:

    Du hast
    - Indy HTTP genommen
    - Quelltext der oben genannten URL in die listbox geladen, als item
    - Dann SaveToFile

    Kein problem bei dir?
    Dann versteh ich das voll nicht. Wenn mein system ein weilchen aufgesetzt wäre und der BCB auch, dann würde ich es ja eventuell noch raffen. aber so?? frisch aufgesetzt. naja......



  • Original erstellt von <Peter>:
    echt?

    Jo, genau nach deiner Beschreibung.



  • hey ich habe den bösen bug glaub gefunden. komisch ist es aber trotzdem das es bei dir dann nicht auch so ist. nun ja, egal. ich bin davon überzeugt das der fehler an den zeilenumbrüchen liegt die nicht entfernt wurden. weill wenn ich ein item lade dessen html code dann keine ZU mehr hat, klappt das saven! 🙂

    gehe ich richtig der annahme das die funktion StringReplace nur einmalig die "\n" entfernt? angenommen es hat mehrere (an einer stelle) also "\n\n" dann löscht die funktion nur den einten umbruch oder? tja, dann müsste ich jetzt nur wissen wie mach ich der StringReplace funktion klar, das ALLR zeilenumbrüche gekillt werden sollen?



  • Das Speichern funktioniert hier auch ohne StringReplace, also inklusive aller Zeilenumbrüche. Und das muss bei dir ja auch mal funktioniert haben, wie deiner ursprünglichen Fragestellung zu entnehmen ist.

    Und wenn du dir über die Arbeitsweise von StringReplace im Unklaren bist dann sieh dir doch einfach den resultierenden String an. Allerdings denke ich, dass rfReplaceAll eigentlich eindeutig ist. 😉



  • im Unklaren bist dann sieh dir doch einfach den resultierenden String an

    hab ich doch. deswegen komme ich doch drauf das nicht alle ZU entfernt sind. was nun? ich verzweifle langsam. macht sich da ein geist über meinen bcb her? 🕶 😮 😞



  • Keine Ahnung, was bei dir los ist, hier werden jedenfalls alle "\n" aus dem String entfernt.

    Was aber, wie schon gesagt, irrelevant ist, da sich der ListBox-Inhalt auch mit Zeilenumbrüchen in den Strings problemlos abspeichern lässt.



  • ich weis echt nicht was los ist. ich schmeisse gleich alle meine rechner aus dem fenster. schau mal, das gibt es doch nicht:
    Gerade gemacht:

    - Festplatte Formatiert
    - Windows XP Professional neu installiert
    - Borland C++ Builder 5 Standard neu installiert
    - Updatepack #1 neu installiert
    - Indy 9.0.11 runtergeladen + neu installiert (genau nach readme)
    - C++ Builder gestartet, TIdHTTP Komponente auf die form + eine ListBox + den hier bekannten code.
    - Kompiliert + ausgeführt. Beim SaveToFile kommt der besagte ntdll.dll error.

    Was soll ich jetzt tun? mich erschiessen? den BCB und windows aus dem fenster knallen? ich meine, siehst du das auch so das, dass völlig keinen sinn macht das dieser fehler kommt? siehe meine auflistung(!) 😡 😞 😞 😞



  • Hi,

    Kann es sein das Windows XP die festplatte nicht richtig formatiert? natürlich absichtlich 🙂

    weil wenn ich mir diese verfluchte ntdll.dll datei mal anschaue, sehe ich folgendes:

    Erstellt: Donnerstag, 23. August 2001, 14:00:00
    Geändert am: Donnerstag, 23. August 2001, 14:00:00

    bei erstellt müsste doch das datum der OS installation sein? weil wenn ich die dll nun kopiere und irgendwo einfüge, ist das heutige datum bei "erstellt".


Anmelden zum Antworten