您好,提前感谢您的帮助。 我有几百个编辑框,我需要将它们的数据转储到文件中。如果我像这样把它们全部写出来就很容易了:
fprintf(data_fptr, "%s", Form1->Edit1->Text);
fprintf(data_fptr, "%s", Form1->Edit2->Text);
fprintf(data_fptr, "%s", Form1->Edit3->Text);
等等...
但我不想。我无意中进入了这个奇特的循环,它节省了大量的代码空间。
edit_n 是我的连接字符串, buffer只是一个数字(1-99)的存储罐 所以第一个字符串看起来像 Form1->Edit1->Text
//-------
data_fptr = fopen("c:\\test\\test.ini", "w+");
char edit_n[80];
char buffer[80];
int n = 1;
do{
sprintf(buffer,"%d",n);
strcat(edit_n, "Form1->Edit"); // first part of the string
strcat(edit_n, buffer); // number of the Edit box
strcat(edit_n, "->Text"); // last part of the string
fprintf(data_fptr,"%ls\n", edit_n); // prints the string (data) to the file
n++; // increments n
sprintf(edit_n,""); // clears the string for the next use
}
while(n < 100);
fclose(data_fptr);
//--------
它可以工作,但不是将 Edit1 中包含的数据写入文件,而是写入连接字符串“Form1->Edit1->Text”
我缺少什么或者如何让它正常工作?
我尝试了一些我知道要做的事情,我不是专业程序员。
首先,您不能将
Text
属性按原样传递给 fprintf()
,您必须使用 Text.c_str()
方法来获取正确的 char*
指针。
其次,为了避免一遍又一遍地重复相同的代码,您通过使用循环进入了写入轨道,但您正在向文件写入完全错误的内容。您需要将
TEdit
指针放入数组/容器中,然后循环访问每个指针的 Text
属性,例如:
TEdit* edits[100];
edits[0] = Form1->Edit1;
edits[1] = Form1->Edit2;
...
for(int n = 0; n < 100; ++n)
{
fprintf(data_fptr, "%s", edits[n]->Text.c_str());
}
如果你不想创建自己的数组,Form 确实有一个
FindComponent()
方法,例如:
for(int n = 0; n < 100; ++n)
{
TEdit *edit = (TEdit*) Form1->FindComponent("Edit"+String(n));
fprintf(data_fptr, "%s", edit->Text.c_str());
}