Problem beim Text einlesen. LoadFromFile
-
Was meinst du mit das Memo wird da aussteigen?
Das ist sehr seltsam..
-
Ich denke mal, dass die Textanzeige, sobald ein Zeichen ausserhalb des ASCII-Bereiches auftritt,
ausgeblendet wird.
-
kpeter schrieb:
Ich denke mal, dass die Textanzeige, sobald ein Zeichen ausserhalb des ASCII-Bereiches auftritt,
ausgeblendet wird.
Das ungewöhnliche ist ja, dass es nur in seiner Rohform nicht zu lesen ist,
öffnet man diese Datei,ändert sie minimal ab, ließt man es ein, funktionierts topp.ICh werde mal meine BCB05 auskraben und damit nochmal probieren, ich werde berichten.
-
Und dem geneigten Leser wird auffallen, dass eben doch eine ganze Menge nicht-druckbarer Zeichen in dem Logfile sind...
Hast Du mal auf Binärebene die Dateiinhalte zwischen der originalen Datei und er geänderten Datei geprüft? Ich bin mir ziemlich sicher, dass zumindest anschließend keine NULL-Zeichen mehr in der Datei enthalten sind...
Wie auch immer, auch mit dem BCB 5 wird das nicht funktionieren, da auch dieser den Lesevorgang beim ersten NULL-Zeichen beendet. Also beim fünften Zeichen des Log-Files.
Ich würde die Datei in einen MemoryStream laden, die ganzen nicht-druckbaren Zeichen maskieren und dann erst die Zuweisung an das Memo durchführen.
-
Joe_M. schrieb:
Und dem geneigten Leser wird auffallen, dass eben doch eine ganze Menge nicht-druckbarer Zeichen in dem Logfile sind...
Hast Du mal auf Binärebene die Dateiinhalte zwischen der originalen Datei und er geänderten Datei geprüft? Ich bin mir ziemlich sicher, dass zumindest anschließend keine NULL-Zeichen mehr in der Datei enthalten sind...
Wie auch immer, auch mit dem BCB 5 wird das nicht funktionieren, da auch dieser den Lesevorgang beim ersten NULL-Zeichen beendet. Also beim fünften Zeichen des Log-Files.
Ich würde die Datei in einen MemoryStream laden, die ganzen nicht-druckbaren Zeichen maskieren und dann erst die Zuweisung an das Memo durchführen.
Vielen Dank für den Hinweiß, ne habe diese Datein unterneinander nicht geprüft.
Wie schonmals erwähnt, muss ich die Datei nur zb mit einem Buchstaben ergänzen und dann die Änderung abspeichern.
Dann werden auch alle Zeichen beim Einlesen eingelesen und angezeigt.Wollte es nur mit BCB5 probieren, weil kpeter meinte dass es bei ihn mit dem BCB3 zum laufen gebracht hat.
Wie lese ist diese Datei als Stream eventuell ein?
Vielen Dank.
-
Ungetestet und ohne Fehlerbehandlung:
AnsiString asDatei = "cPlusplus.log"; TMemoryStream* msDatei = new TMemoryStream(); // Stream erzeugen msDatei->LoadFromFile(asDatei); // Datei in Stream lesen char* cBuffer = new char[msDatei->Size + 1]; // Puffer erzeugen setmem(cBuffer, msDatei->Size + 1, NULL); // Puffer initialisieren msDatei->Seek(0, soFromBeginning); // Stream auf Anfang setzen msDatei->Read(cBuffer, msDatei->Size); // Stream in Puffer kopieren for (int i = 0; i < msDatei->Size; i++) // Alle NULLen durch Leerzeichen ersetzen if (cBuffer[i] == 0x00) cBuffer[i] = 0x20; Memo1->Text = AnsiString(cBuffer); // Puffer dem Memo zuweisen delete[] cBuffer; // Puffer freigeben delete msDatei;
// Stream freigeben
-
Joe_M. schrieb:
Ungetestet und ohne Fehlerbehandlung:
AnsiString asDatei = "cPlusplus.log"; TMemoryStream* msDatei = new TMemoryStream(); // Stream erzeugen msDatei->LoadFromFile(asDatei); // Datei in Stream lesen char* cBuffer = new char[msDatei->Size + 1]; // Puffer erzeugen setmem(cBuffer, msDatei->Size + 1, NULL); // Puffer initialisieren msDatei->Seek(0, soFromBeginning); // Stream auf Anfang setzen msDatei->Read(cBuffer, msDatei->Size); // Stream in Puffer kopieren for (int i = 0; i < msDatei->Size; i++) // Alle NULLen durch Leerzeichen ersetzen if (cBuffer[i] == 0x00) cBuffer[i] = 0x20; Memo1->Text = AnsiString(cBuffer); // Puffer dem Memo zuweisen delete[] cBuffer; // Puffer freigeben delete msDatei;
// Stream freigeben
SUPER. 1A -Klasse - Vielen Dank es funktioniert! Alleine wäre ich darauf nie gekommen.
Ich danke jeden hier!Ich liebe dieses Forum (L)
Und Warum ging das jetzt nicht direkt mit LoadFromFile? Wegen den Sonderzeichen?
-
inek68 schrieb:
Und Warum ging das jetzt nicht direkt mit LoadFromFile? Wegen den Sonderzeichen?
Ja, insbesondere wegen der NULL-Bytes in der Datei (und auch nur diese habe ich maskiert).
-
Diese paar Zeilen zaubern mir wieder mein lächerln ins Gesicht.
Nur noch eine Frage, besteht die Möglichkeit, jetzt eventuell wo es eingeladen ist, die Datei vom MemoFeld1 in eine Stringliste zu laden.
Möchte gerne mit String-Verarbeitungsmethoden arbeiten, deshalb.
-
Memo1->Lines ist vom Typ TStringList, also lassen sich auch alle Operationen darauf anwenden.
Ansonsten einfach nur in der Zeile 'Memo1->Text = AnsiString(cBuffer);' das Memo1 durch den Namen der StringList ersetzen.
-
Ich kann nicht mehr! Das ist Super Genial, ich finde kein beschreibendes Wort für meine Gefühlslage.
Nochmals VIELEN Dank an das Board und seine Mitglieder!
-
Kurze Frage habe ich noch!
Gibt es eine ähnliche Funktion wie .eof(),nur für meine Stringlist, möchte eine Datei Filtern und solange noch Text vorhanden ist, soll die Schleife ihre Schleifen machen!
-
Zeilenweise lesen:
for(int i=0; i<pStringList->Count; i++) { AnsiString str = pStringList->Strings[i]; // ... }
-
es kommt eine Fehlermeldung:
pStringList: undefiniertes Symbol.
:S
-
Das ist jetzt nicht dein Ernst?!?
-
Killer-Kobold schrieb:
Das ist jetzt nicht dein Ernst?!?
Doch!
-
Dann lerne lieber erst einmal die C++-Grundlagen...
-
Killer-Kobold schrieb:
Dann lerne lieber erst einmal die C++-Grundlagen...
Wenn du es sagst!
-
Immer schön sachlich bleiben, und don't feed the trolls.
inek: ein bisschen Eigeninitiative darf schon erwartet werden; was könnte "undefiniertes Symbol" wohl bedeuten!?
-
@Jansen: Sorry für das Mißverständnis, aber ich meine das definitiv ernst. Lies dir mal den ganzen Thread durch... Ich bin zu dem Schluß gekommen, dass er nicht mal in der Lage ist, einen simplen Variablennamen im Source anzupassen. Mir sagt das, dass die C++-Kenntnisse gegen NULL tendieren. Und ohne die Grundlagen zumindest ansatzweise zu kennen, sollte man sich nicht an der VCL versuchen, oder siehst Du das anders.
Gruß KK