Text aus Datei in TEdit schreiben
-
Hallo,
ich hoffe ich bekomme hier keine Prügel, wenn ich so ne billige Frage stelle.
Ich lese aus einer Datei eine Zeile ein, aber wie bekomme ich das nun in ein TEdit???
TEdit->Text verlangt einen AnsiString (nutze Borland)
Wie bekomme ich meinen Text von char* in AnsiString umgewandelt???Gruß n_r
-
string text; TEdit->Text text.c_str();Mal so grob geraten. Allerdings sollten schon ein paar mehr Informationen in Form von Quelltext vorhanden sein.
-
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * datei; char *text; AnsiString string; if (OpenDialog1->Execute() == true) { datei = fopen(OpenDialog1->FileName.c_str(), "w"); fgets(text, 50, datei); //Edit1->Text = ???? fclose(datei); } }Ich hoffe damit wird es klarer
-
Rontha schrieb:
... TEdit->Text text.c_str();...
Also das kann eigentlich schn syntaktisch nicht hinkommen.
Gruß,
Simon2.
-
Hallo
das c_str() brauchst du gar nicht, denn bei dir ist text ja ein C-String, kein std::string.
Deshalb reichtEdit1->Text = text;/Edit : Das gehört ins Builder-Forum.
bis bald
akari
-
ich denke mal das
Edit1->Text= ....;Auch nich unbeding richtig ist, da Text sicher ne
private eigenschaft ist! Auser es funktioniert so wie in VB.net bei Propertysehr
Edit1->setText(...);
-
Hallo
BorisDieKlinge schrieb:
ich denke mal das
Edit1->Text= ....;Auch nich unbeding richtig ist, da Text sicher ne
private eigenschaft ist! Auser es funktioniert so wie in VB.net bei PropertysRichtig es ist ein Property.
bis bald
akari
-
@not_registered
datei = fopen(OpenDialog1->FileName.c_str(), "w");Hiermit öffnest du deine Datei aber zum Schreiben. Wenn du lesen willst wäre hier ein "r" nötig.
-
das ist klar, später muss ich ja auch noch rein schreiben. Mit den Edits kann der Text verändert werden.
-
das c_str() brauchst du gar nicht, denn bei dir ist text ja ein C-String, kein std::string.
Deshalb reicht
C/C++ Code:
Edit1->Text = text;
C/C++ Code:
Edit1->Text = text;
C/C++ Code:Nein damit geht es nicht. Die Eigenschaft "Text" vom Edit-Feld will einen AnsiString, was auch immer das ist, wahrscheinlich wieder was Borland-spezifisches. Mit Visual C++ von Microsoft hab ich dieses Problem nicht.
-
Doch das geht. Bitte zeig uns mal die Fehlermeldung.
AnsiString hat mehrere Konstruktoren. Dabei ist auch einer der char* übernimmt.
-
Braunstein schrieb:
Doch das geht. Bitte zeig uns mal die Fehlermeldung.
AnsiString hat mehrere Konstruktoren. Dabei ist auch einer der char* übernimmt.Der Comiler meldet kein Fehler, allerdings kommt nach dem Öffnen der Textdatei eine Zugriffsverletzungs-Meldung, die nicht kommt wenn ich die Text-Zuweisung auskommentiere:
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * datei; char *text; if (OpenDialog1->Execute() == true) { datei = fopen(OpenDialog1->FileName.c_str(), "w"); fgets(text, 50, datei); //Edit1->Text = text; fclose(datei); } }
-
Du solltest vielleicht text noch etwas Speicher zuweisen. fgets macht das nicht.
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
also, das problem lag daran, dass fgets() auch den Zeilenvorschub ('\n') liefert, außerdem hab ich jetzt als text-variable char[50] genommen.
siehe da:
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * datei; char text[50]; memset(text, '\0', strlen(text) - 1); if (OpenDialog1->Execute() == true) { datei = fopen(OpenDialog1->FileName.c_str(), "r"); fgets(text, 50, datei); text[strlen(text)-1] = '\0'; Edit1->Text = text; fclose(datei); } }
-
Der Zeilenvorschub stört hier nicht (höchstens optisch). Das Problem lag einzig und allein am fehlenden Speicher.
-
Hallo
Natürlich könnte man auch auf C-Strings und FILE verzichten und gleich std::fstream oder TStringList verwenden um gleich String-Klasse zu benutzen ohne Umweg über C-String.
bis bald
akari