Probleme bei Dateiöffnung ( OpenDialog)



  • Hi,

    ich habe mir ein parser in C geschrieben, der eine Textdatei durchläuft und auswertet.

    parser(char chDatei[], float *fX, float *fY, int iT, int *iAnzahl)
    {
    .
    .
    .
    .
    }
    ich habe leider kein Borland bzw. den Code zur Hand, sonst hätte ich ihn kurz gepostet.
    Die Dateiöffnung und Dateischließung habe ich im parser drin (fopen,fclose),
    das ganze habe ich in der Konsolenanwendung getestet, funktioniert wunderbar.
    Nun möchte ich das ganze auch mit der Oberfläche machen,
    ich habe mich mit der DialogOpen Geschichte auch mal befasst, ging soweit ganz gut,
    kann ich die Konvertierung von TString glaub ich nach Char in der Oberfläche machen? Oder muß ich mein Parser umschreiben?!

    Stell mir das so in der Oberfläche so vor:

    OpenDialog->Execute();
    TStringList *datei = new TStringList();
    datei->LoadFromFile(OpenDialog->FileName);

    Und jetzt die variable "datei" noch nach char konvertieren, habe leider nichts konkretes gefunden 😞
    Ausser Append, aber dies hab ich nur in bezug mit einem Memofeld hinbekommen.
    Würde mich sehr freuen, wenn mir jemand helfen könnte!!!



  • Hallo

    du kannst den Inhalt von TStringList mit
    - TStringList::Text (ganzer Inhalt)
    - TStringList::Strings[] (einzelne Zeilen als Array mit Größe TStringList::Count)

    abbrufen, dann brauchst du noch AnsiString::c_str(), um einen char * zu bekommen.

    bis bald
    akari



  • Du kannst die Eigenschaft Text von TStringlist verwenden. In etwa so

    int size = datei->Text->Length();
    char *buf = new[size+1];
    strcpy(buf,datei->Text.c_str());
    .
    .
    .
    delete[] buf;
    


  • danke für die Hinweise!
    Das mit datei->Text->Length(); habe ich nicht hinbekommen, mein Compiler hat immer gemeckert, hab dann ein großes char array deklariert und es mit strcpy rüberkopiert, das ging dann auch, ist halt nicht so elegant.
    Im nachhinein merkte ich das mein parser eigentlich nur den Pfad braucht,
    so dacht ich mir versuche ich es mit FileName vom Dialog, da steht ja der Pfad drin. Aber direkt konnte ich FileName nicht verwenden, mein Compiler sagt das FileName ein undefiniertes Zeichen ist,
    beim Debuggen steht der angegebene Pfad drin, was muss ich da noch tun damit es direkt verwenden kann?! In der Hilfe bin ich nicht fündig geworden 😞



  • Hallo

    zeig doch mal deinen Code mit der Anwendung von TOpenFileDialog. Auf FileName kann man sehr wohl zugreifen, wie dieses Beispiel zeigt

    if (OpenDialog1->Execute())
    {
      AnsiString filename;
      filename = OpenDialog1->FileName;
      ...
      }
    

    bis bald
    akari



  • Zur Länge:
    Da habe ich wohl den falschen Dereferenzierungsoperator verwendet. Es muss natürlich

    int size = datei->Text.Length();
    

    sein.
    Desweiteren wäre anzumerken, dass die vollständige Fehlermeldung sehr hilfreich bei der Wahrheitsfindung sein kann (also kein "der Compiler meckert").


Anmelden zum Antworten