C++ Builder: read /write a text file with a component
You can read from / write to a text file with list components such as TMemo, TListBox, and so on. This is done with the functions LoadFromFile and SaveToFile, for example: Memo1->Lines->LoadFromFile(ATextFile).
This example uses a stringlist that reads its strings from a text file. A stringlist is a non-visual component.
In the example, you can display individual strings by entering their number (index) and clicking a button.
Because the stringlist must be available at any time, we have to construct it at start-up and destroy it before
the application terminates:
- In the unit file for the application's main form, there must be a field of type TStrings in the form's declaration.
In our example, a field called SL.
- An event handler for the main form's OnCreate event (executes before the form appears) should create a stringlist
and assign it to the field that was declared earlier.
- The stringlist must be destroyed before the application terminates, for example in the form's OnClose event.
Building the example
- Create a new VCL Forms application. As usual, it's best to save all the files in a new empty folder,
such as \StringList.
- In unit1.h, declare a field named SL by adding a line under private:
private: // User declarations
- Through the Object Inspector, create an event handler for OnCreate of Form1 and complete it as follows:
void __fastcall TForm1::FormCreate(TObject *Sender)
SL = new TStringList;
Note: because in C++ \ acts as the "escape" character, we have to write \\ if we want to specify a backslash.
- Create an event handler for OnClose of Form1 and complete it as follows:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
- In a text editor (such as NotePad) create a text file with a few lines.
Save it as List.txt in folder \StringList.
- Add three components to Form1: a TButton, a TEdit and a Tlabel.
- In the Object Inspector, change the property NumbersOnly to True.
- Double click Button1 and complete the event handler as follows:
void __fastcall TForm1::Button1Click(TObject *Sender)
i = StrToInt(Edit1->Text);
if (i > SL->Count)
ShowMessage("Line does not exist");
Label1->Caption = SL->Strings[i];
- Save all and test your program.