AnsiString direkt aus einem File füllen



  • hallo.

    ich will einen AnsiString direkt aus einem file füllen. also nicht erst z.b. ein memo, und danach aus diesem memo die variable füllen.
    das problem ist aber, dass ich das leider nicht hinbekomme 😞
    das liegt daran das ich keine richtige methode dafür gefunden habe, denn AnsiSting vrfügt nicht über z.b. LoadFromFile.

    weiß jemand wie ich das machen kann???

    p.s. bin anfänger.....



  • Dann nimm halt eine Klasse, die über eine LoadFromFile-Methode verfügt, wie zB. TStringList. Über die Text-Property der StringList kannst du dann auf den gesamten Inhalt als einzelnen String zugreifen.



  • So direkt geht das nicht (Wäre ja auch zu schön :). Als Ausgangsmaterial wirst Du sicherlich eine Textdatei haben, nehme ich mal an. Die solltest Du in eine TStringlist laden können.



  • das ging aber schnell, danke.

    Ich verwende jetzt:

    TStringList *TestList = new TStringList;

    ... Open Dialog ....

    TestList->LoadFromFile(opdMain->FileName);

    .... programm ....

    delete TestList;

    allerdings hat TestList jetzt immer komische zeichenfolgen, anstatt des selektierten textes inne.
    was mache ich da falsch???
    sorry, aber aus der borland hilfe werd ich nicht klug...

    danke.



  • Original erstellt von ClippingError:
    allerdings hat TestList jetzt immer komische zeichenfolgen, anstatt des selektierten textes inne.

    Wie bitte?



  • Was ist das denn für 'ne Datei(wie erstellst du sie?)?



  • ich nehme irgendeine datei. Der genaue Inhalt ist noch egal, den will ich später zwar mal parsen, aber soweit bin ich noch nicht.

    Also in meiner testDatei steht "hallo".

    laut debugger lautet der inhalt TestList allerdings "015AAC84"
    😞

    Die Datei habe ich mir dem texteditor von Windows erstellt.



  • Ich darf meinen ersten Beitrag zitieren: "Über die Text-Property der StringList kannst du dann auf den gesamten Inhalt als einzelnen String zugreifen."



  • und so wie du sagst geht es jetzt auch.

    folgendermaßen komme ich drann:
    Memo1->Lines->Add(TestList->GetText());

    Danke!



  • folgende Funktion:

    AnsiString getfile(AnsiString filename)
    {
     TFileStream* file = new TFileStream(filename,fmOpenRead); // Datei öffnen
     AnsiString content; // hier wird der Inhalt gespeichert
     char buffer[1]; // zum lesen
     while(file->Position<file->Size)
     {
      file->Read(buffer,sizeof(buffer));
      content += buffer[0];
     }
     return content;
    }
    

    Anwendung:

    AnsiString dateiinhalt = getfile("c:/datei.txt");
    

    cu Arne



  • Das ist aber ein bisschen lahm, immer nur ein Byte zu lesen. 🙄



  • Oha, jetzt wird aber das Rad neu erfunden. Hoffentlich wirds auch rund. 😉



  • Auf jeden Fall hat es schon ein schönes rundes (Speicher)Loch. 😉

    Mal im Ernst, Arne, das willst du doch nicht wirklich jemandem zur Nachahmung empfehlen? Sieh dir alles noch mal genau an, das kannst du doch bestimmt besser.


Anmelden zum Antworten