Problem beim Text einlesen. LoadFromFile
-
Guten Abend,
hab ein großes Problem wo ich echt nicht mehr weiter weiß,
unzwar versuche ich eine log textdatei einzulesen, das log dokument wird von einer anderen software geschrieben.
TStringList* stlData = new TStringList; AnsiString slDataFile=C:\\...Pfaf halt.txt; //if(FileExists(slDataFile)) // Dateiinhalt in die Stringliste laden: stlData -> LoadFromFile(slDataFile); Memo2->Lines->Add(stlData->Text) ;
Beim der Ausgabe des Textest in dem Memo-Feld kommen nur die ersten 2-3 Buchstaben,
hab die Textdatei die gelesen wird 1 Mal geöffnet und anschließend neu abgespeichert, promt konnte man alles wieder schön einlesen.Woran könnte das liegen? Wie kann ich dieses Problem lösen?
-
schonmal Memo->LoadFromFile getestet?
greetz KN4CK3R
-
KN4CK3R schrieb:
schonmal Memo->LoadFromFile getestet?
greetz KN4CK3R
Danke für die rekordverdächtig schnelle Antwort.
Ich habs mit
Memo1->Lines->LoadFromFile(slDataFile);
getestet, jedoch geht das nicht,
ich brauch diese log.txt Datei in einer StringList .
-
hi inek68
So müsste es gehen:
TStringList* stlData = new TStringList; AnsiString slDataFile="C:\\...\\log.txt"; //if(FileExists(slDataFile)) // Dateiinhalt in die Stringliste laden: stlData -> LoadFromFile(slDataFile); Memo2->Lines = stlData ;
Chris_
-
ich nehme an, das hat er so in seinem Programm und das war nur die schnelle Forenversion. Würde der Builder wahrscheinlich auch nicht kompilieren ohne die "
greetz KN4CK3R
-
KN4CK3R schrieb:
ich nehme an, das hat er so in seinem Programm und das war nur die schnelle Forenversion. Würde der Builder wahrscheinlich auch nicht kompilieren ohne die "
greetz KN4CK3R
Die Datei lässt sich gut compilieren, der Pfad wurde nur für das Forum weg gemacht.
-
Hab mal die LOG Datei genauer angeschaut, erst kommen paar Buchstaben danach 2-3 Leerzeilen, genau diese Leerzeilen werden zum Verhägnis... doch öffne ich diese Datei und tue von mir aus ein X ans ende, wird die Datei gelesen...
Seltsam so ein Problem...würde es vlt mit
TMemoryStream *ms = new TMemoryStream();
besser laufen?
Wenn ja könnte mir jemand vielleicht helfen bei
TMemoryStream *ms = new TMemoryStream();
, wie ich das so genau machen soll?!
Oder eine andere Variante Text einzulesen mit VCL ?
-
Hallo,
ein TMemoryStream zum Einlesen einer Textdatei ist nicht anzuraten, da es keine Eigenschaft Strings besitzt. Die brauchst du ja, um zeilenweise deine Datei zu analysieren.
Eine TStringList ist die bessere Wahl.
Um die Leerzeilen zu beseitigen, habe ich mal den folgenden einfachen Code geschrieben.TStringList* Src = new TStringList; Src->LoadFromFile("access.log"); // Zeilen im StringList einzeln auf Inhalt prüfen for ( int i=0; i < Src->Count; i++) { String Line = Src->Strings[i]; // Die Methode TrimLeft gibt ein neues AnsiString-Objekt ohne führende Leer- und Steuerzeichen zurück. Line.TrimLeft(); if (Line == "") continue; else Memo1->Lines->Add(Line); } delete Src;
mfg
kpeter
-
// Die Methode TrimLeft gibt ein neues AnsiString-Objekt ohne führende Leer- und Steuerzeichen zurück.
Genau darum muß man dann aber folgendes schreiben:
Line = Line.TrimLeft();
-
-
Vielen Dank,
für die Beiträge,
Habe dein Lösungsansatz mal soweit in den Compilier geworfen, leider ändert das nicht an dem Problem.
Da es geht, wenn ich die Datei einmal öffne und ein x-beliebigen Buchstabe oder Zeichen einfüge und dann neu abspeichere.
Hab das dann mal so versucht:
char s='m'; fstream datei; datei.open("c:\\", ios::app); //Öffnen der Datei datei.seekg(0, ios::end); //Sucht das Ende der Datei datei.put(s); datei.close();
funktioniert wieder nicht!
Dann habe ich gedacht, ok, ich versuche mit Dateinamenänderung.
MoveFile("log1" , "log2");
Das funktioniert auch nicht! Man das ist so frustierend!
-
Aber du kannst doch eine beliebige andere Textdatei (z.B. von Notepad erstellt) einlesen?
-
kpeter schrieb:
Aber du kannst doch eine beliebige andere Textdatei (z.B. von Notepad erstellt) einlesen?
Ja, ich kann das alles einlesen, kein Problem! Bis auf diese Log Datein.
-
Welches Programm erstellt die denn?
-
kpeter schrieb:
Welches Programm erstellt die denn?
so ein Prog von einem Freund! Eigenentwicklung!
Das sollte eigentlich nicht ausschlaggebend sein, weil wenn man diese Datei mit einem Texteditor, egal welchem wird diese Datei samt Textinhalt angezeigt.
Nur nicht mit meinem Programm.
-
Hmm,
nimm mal anstelle des Memo ein TRichEdit, muss aber nicht unbedingt was bringen.
Probier dort mal PlainText aus.
-
kpeter schrieb:
Hmm,
nimm mal anstelle des Memo ein TRichEdit, muss aber nicht unbedingt was bringen.
Probier dort mal PlainText aus.
An sich lade ich doch die Datei in eine StringList und gebe sie nur nochmals in einem Memo Feld aus.
Was hat dieses Plain Text an sich ?
-
Möglicherweise ist deine Logdatei keine reine Textdatei und enthält noch Textformatierungen....
PlainText:
Gibt an, ob das Steuerelement den Text beim Lesen oder Schreiben einer Datei als normalen Text oder als Rich Text behandelt.
-
Hallo also bei mir funktioniert das so.
Klick auf button wird komplett meine Logfile eingetragen und angezeigt.void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList* stlData = new TStringList(); stlData->LoadFromFile("c:\\Test.log"); Memo1->Lines->Add(stlData->Text); }
PS: geht mit allen .txt, .log files was so auf dem rechner zu finden ist.
-
kpeter schrieb:
Möglicherweise ist deine Logdatei keine reine Textdatei und enthält noch Textformatierungen....
PlainText:
Gibt an, ob das Steuerelement den Text beim Lesen oder Schreiben einer Datei als normalen Text oder als Rich Text behandelt.@kpeter: Die Datei beinhaltet auch Sonderzeichen.
Was für mich sehr komisch ist, dass wie schon erwähnt, wenn ich die Textdatei per Hand öffne und egal ob ich ein Buchstabe oder Zeichen hinzufüge oder davon lösche, dann am Schluss bei der Frage "Änderungen an diesem Dokument speichern" "JA" mit JA bestätige.Dann anschließend so in meinem Programm lade:
void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList* stlData = new TStringList(); stlData->LoadFromFile("c:\\Test.log"); Memo1->Lines->Add(stlData->Text); }
funktioniert es super.
Doch ich möchte gerne dass das automatsich geladen wird.
-------------------------------------------------
Beim automatischen laden, kommen nur die ersten paar Zeichen in die StringList, in diesem Fall sind es Sonderzeichen.