Texdatei einlesen



  • Hallo zusammen! Habe ein Programm zum auslesen gewisser Daten einer Textdatei geschrieben (mit Microsoft Visual C++). Will das Programm jedoch mit Borland zum laufen bringen. Hab jedoch keine Ahnung vom Borland C++ Builder und entsprechend das Programm nicht zum laufen gebracht. Die Daten die nach Betätigung eines Buttons ausgelesen werden, werden in einen String gespeichert und an eine Listbox ausgegeben.

    String ^Seriennummer; //Deklaration
    String ^Temp;
    String ^Fehler_temp;
    String ^Zeichen;

    StreamReader ^lesen=gcnew StreamReader ("c:\Protokoll.txt") //Datei zum einlesen öffenen

    Temp=lesen->ReadLine(); //erste Zeile auslesen

    Seriennummer=Temp->Substring(12,12);
    //Teilstring bilden der Länge 12 ab der 12. Stelle

    while { (zeichen!="Ende") //Protokolle haben unteschiedlich viele Zeilen und es soll ein bestimmter Fehler gesucht werden, in der letzten Zeile steht Ende

    Temp=lesen->ReadLine(); //Zeile einlesen
    Zeichen=Temp->Substring (27,4); //Teilstring bilden
    if (zeichen=="over") //Fehler in dieser Zeile vorhanden?
    Fehler_temp="Übertemperatur";
    }
    lesen->Close();
    listBox1->Items->Add(Seriennummer+Fehler_temp);

    Das Programm ist abgespeckt, wäre euch aber Dankbar, wenn jemand dies so schreiben könnte, dass es mit dem C++ Builder funktioniert und ich somit mal einen Ansatz habe. Vielen Dank im voraus, Gruß Tales



  • if (zeichen=="over") //Fehler in dieser Zeile vorhanden?
    

    obendrüber steht noch "Zeichen" statt "zeichen". Bitte benutze Codetags für Code.

    greetz KN4CK3R



  • Das Programm musst du nicht umschreiben, sondern komplett neu schreiben, da es unter C++ Builder nicht laufen wird. Oder hat Borland neuerdings einen C++/CLI konformen Compiler? Damit es auf beiden Systemen läuft, musst du von .NET wegkommen und dich mit iostreams oder zumindest WinAPI begnügen 😉

    MfG



  • Das Programm soll nur mit Borland laufen...



  • TStringList* list = new TStringList();
    list->LoadFromFile("bla.txt");
    // Jetzt hast du die Text-Datei im Speicher
    // und kannst die Methoden von TStringList nutzen
    delete list;
    


  • So Ungefähr sollte es gehn
    Habe es nochmal überarbeitet so geht es ( Fehler Listindex ) ist beseitigt

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "readtxt.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm3 *Form3;
    
    AnsiString workpath=ExtractFilePath(ParamStr(0)); //Gibt den aktuellen Pfad an wo die exe Datei liegt
    //---------------------------------------------------------------------------
    __fastcall TForm3::TForm3(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm3::Button1Click(TObject *Sender)
    {
    String SerNr;
    String Fehler_Temp;
    String tmp;
    int i=0;
    
    TStringList *lesen = new TStringList();
    
    lesen->LoadFromFile(workpath+"protokoll.txt");  //erste Zeile auslesen
    SerNr=lesen->Strings[0].SubString(12,12);
    //Teilstring bilden der Länge 12 ab der 12. Stelle
    ListBox1->Items->Insert(0,"SerNr: "+SerNr); // zugefügt eintragung von Seriennummer
    
    //for(i;lesen->Text.Length();i++) //Protokolle haben unteschiedlich viele Zeilen und es soll ein bestimmter Fehler gesucht werden, in der letzten Zeile steht Ende
    while(!lesen->Strings[i].Pos("End"))//neu While gewählt
    {
    i++; //hochzählen von i zur bestimmung der Strings[i]
    tmp = lesen->Strings[i].SubString(27,4); //Teilstring bilden
    if(!lesen->Strings[i].Pos("End")) // Prüfen ob DateiEnde  EOF mit End erreicht ist
    {
    //if (!lesen->Text.Pos("over")) //Fehler in dieser Zeile vorhanden?
    if (lesen->Strings[i].Pos("over"))// Geändert in String[i]
    Fehler_Temp="Übertemperatur";
    else
    Fehler_Temp="OK"; // Test ausgabe
    //ListBox1->Items->Insert(i,"tmp: "+tmp+i+"Error_tmp: "+Fehler_Temp);
    ListBox1->Items->Add("tmp: "+tmp+i+"Error_tmp: "+Fehler_Temp);//geändert
    }
    else
    ListBox1->Items->Add("EOF ( END )"); // Eintragen wenn das EOF erreicht ist als letzte Zeile
    }
    delete lesen;
    }
    //---------------------------------------------------------------------------
    

    So viel Spass
    Grüße



  • Jungs, ich danke euch. Ihr habt mir super geholfen. Gruß Tale



  • @Tale
    Falls du die fertigen C++Builder dateien brauchst sage bescheid schicke dir dann nee mailmusste nur noch kompilieren fertsch ;o)

    Grüße



  • Ein kleines Problem hätte ich da noch. Es sollen mehrere Textdateien eingelesen werden. Aber sonst klappt alles wunderbar. Grüße



  • Hallo

    Ein kleines Problem hätte ich da noch. Es sollen mehrere Textdateien eingelesen werden.

    Dann programmier es entsprechend um. Ohne konkrete Frage samt Fehlerbeschreibung keine konkrete Antwort.

    bis bald
    akari



  • Wie mehrere ?
    Alle mit einmal oder einzeln auswählbar ?


Anmelden zum Antworten