LoadFromFile() läd nicht alles in das RichEdit Feld
-
BCProgrammer schrieb:
ich wollte eine Textdatei in ein RichEdit einladen.
Bist du sicher, dass es sich tatsächlich um eine reine Textdatei handelt und nicht um eine Binärdatei? Letztere musst du, wenn du sie in einem Textfeld o.ä. anzeigen willst, zuerst binär öffnen und alle nichtdarstellbaren Zeichen (ASCII < 30 oder so) z.B. durch Leerzeichen ersetzen.
-
Hallo Dasd,
hab ich probiert, macht aber auch nicht weiter.

Aber könntest du (macfly123) mir mal einen Beispiel Code posten?
-
Nein es ist keine reine Textdatei.
Wie funktioniert das mit dem Binären einlesen?
-
Schau dir mal TFileStream an...
-junix
-
Hab es jetzt mal mit TFileStream gemacht.
Lädt aber genauso weit wie vorher.Gibt es statt dem fmOpenRead auch eine Möglichkeit binär zu öffnen?
Mein Code:
TFileStream *FS1 = new TFileStream(Datei,fmOpenRead); RichEdit1->Lines->LoadFromStream(FS2);
-
Hast Du Dich eigentlich schon mal mit Jansens Posting befasst

-
Nein, ich weis nicht wie das geht.
-
1. Wie man dateien mit Filestream binär öffnet findest du in der Doku zu FIlestream
2.BCProgrammer schrieb:
Nein, ich weis nicht wie das geht.
Willkommen in der Welt der Sofwareentwicklung. Hier musst du nun tatsächlich selber hand an die Daten legen und sie selber im Speicher etwas umbauen. Da gibts keine vorgefertigten VCL Funktionen...
-junix
-
also zuerst würde ich ne for schleife anlegen damit du weisst wie viel zeichen du lesen muss.
int file = open(name, O_CREAT); int size=filelength(file); close(file); fstream txt(name,ios::in|ios::out|ios::binary); txt.seekp(ios::beg); for (int a=1;a<=size;a++) { big.get(zeichen); int zeichen_ascii=(unsigned char) zeichen; //Hier musst du jetzt aussortieren if (zeichen_ascii>31 && zeichen_ascii<122) // dann ausgeben in textfeld } txt.close();das ist ein sehr knapp gehaltener code denk an deine klassen io.h und fstream.h
und das du noch andere zeichen ausgibst sonder zeichen etc.(return ganz wichtig).also denke ich das ist jetzt genug hilfe so kann man auch zb strings und co umformen oder datei typen konvertieren zb in normalen txt file ohen steuerzeichen usw dannhalt einfach in ner neuen datei ausgeben.wenn jetzt noch sachen fehlen zb farbeige schrift di im original dokument vorhanden sind musst du die mit einbinden.
für filestream ist auch ne binäroption verfügbar die ich aber noch nie beutzt habe weil ich da zu wenig handlungsfreiraum habe.
ps. wenn du die datei über den opendialog auswählst muss du noch die \ in \\ wandeln.
EDIT: Bitte Code-Tags verwenden!! sfds
-
macfly123 schrieb:
also zuerst würde ich ne for schleife anlegen damit du weisst wie viel zeichen du lesen muss.
Jo, da stimm ich mit dir überein. Ich finds allerdings völlig unsinnig die Datei zweimal zu öffnen. Lässt sich doch alles mit fstream lösen... Sogar mit TFileStream lässt sich das ohne Probleme lösen ohne irgendwelche andere "öffnen-schliessen"-Aktionen.
macfly123 schrieb:
denk an deine klassen io.h und fstream.h
Dafür würden sie dir im C++-Forum wohl den Kopf abhacken... Sind auch keine Klassen die du da nennst sondern Headerfiles.
macfly123 schrieb:
datei typen konvertieren zb in normalen txt file ohen steuerzeichen usw dannhalt einfach in ner neuen datei ausgeben.
Wozu, wenn man die Daten ja eh schon in den Speicher eingelesen hat?
macfly123 schrieb:
für filestream ist auch ne binäroption verfügbar die ich aber noch nie beutzt habe weil ich da zu wenig handlungsfreiraum habe.
Erklärung bitte.
macfly123 schrieb:
ps. wenn du die datei über den opendialog auswählst muss du noch die \ in \\ wandeln.
Falsch
-junix
-
ok es sind header wenn du es so genau nimmst (aber wenn ich mir nen paar funktionen code und die als header speicher und so einfach mit #include einbinden kann statt dieses ewige add to projekt usw. sage ich auch und die funktion includen) ist halt ne dumme gewohnheit geworden.
und fstream ist meines wissens nach eine klasse.wo sagte ich doppeltöffnen das sagte ich bei nen konverter.
so kannst du das zeichen in dein textfeld knacken.wozu fstream weil ich das am bestern mit finde und damit nie probs hatte (datei grösser 2gb) die fstream header sind auch im jeden anderen compiler dabei und so kann man das zb. auf dev c++ weiter nehmen.
was sehr nützlich ist wenn man mit anderenzusammen gecodet die zb dev c++ nehmen aus diesem grunden habe ich das immer genommen.kannst du mir das erklären warum man das \ in \\ nicht umstellen musst?
wenn ich eine datei öffne einfach den den ansistring von (opendialog->Filename) nehme kann der die datei nicht öffnen deswegen habe ich ne einfache funktion gecodet die sowas parsed.was du ja einfach abfragen kannst ob geöffnet wurde oder nicht.
if (!txt) Edit2->Text="Abbruch";und es war nur ein beispiel so nen fileconverter zu bauen.
nicht mehr.
-
macfly123 schrieb:
kannst du mir das erklären warum man das \ in \\ nicht umstellen musst?
wenn ich eine datei öffne einfach den den ansistring von (opendialog->Filename) nehme kann der die datei nicht öffnen deswegen habe ich ne einfache funktion gecodet die sowas parsed.Da gibt es nichts zu erklären. Das ist so, wie junix es sagt.
Außerdem solltest Du uns erklären, warum es nötig ist. Was für einen Sinn hätte es, wenn man einen OpenDialog verwendet, und dann erst noch den Dateipfad aufbereiten muß??
-
also eine frage wie soll man sowas denn realisieren das es auf vielen c++ compilern funktioniert wenn man dieses LoadFromFile und so benutzt?
und dann bin ich für info dankbar wie man sowas meistert und wo der vorteil dieser open routine ist die ihr beschreibt bzw wie man die nutzen kann.
weil ich mittlerweile 4 jahre mit fstream auskam und muss sagen das ich nie probs hatte.aber das ist wieder das was ich mein diese gewisse art unhöflichkeit.
was meckert ihr über meine fstream methode?
-
macfly123 schrieb:
was meckert ihr über meine fstream methode?
Vermutlich, dass es in der VCL (um die es hier ja geht) Funktionen gibt, mit denen es um einiges einfacher ist. Außerdem geht es ja hier um den BCB und nicht "möglichst viele C++-Compiler". Wenn es dir darum geht, bist du im falschen Forum...
-
gut dann ist es verkehrte forum weil ich die vcl nur zur visualisierung mit nutze.
und fast alles in normal c++ mache. weil ich in der programmierer workgroup in der ich geworked habe es standard war.
man hat funktionen klassen usw. in normal c++ geschrieben und konnte das denn
in einer konsole mfc und so weiter darstellen.