【发布时间】:2014-09-02 11:28:21
【问题描述】:
我正在尝试读取由 ';' 分隔的数据成一个结构数组,所以我可以稍后过滤它们。 示例数据:
1.1 ; name1; 11-07-2014; 14:30
1.2 ; name2; 11-07-2017; 15:10
我不知道这个 .txt 文件中有多少条目。此外,我需要添加一个可能性来选择用户想要使用哪个文件(有效)我是 C++ 新手,所以我将不胜感激任何提示。
到目前为止,我已经创建了这个:
typedef struct{
char numb[21];
char names[100];
char date[11];
char time[6];
}vec;
vec *logs[200];
void_fastcall TForm1::Button1Click(TObject *Sender)
{
OPENFILENAME ofn;
char fname[MAX_PATH] ="";
ZeroMemory( & ofn, sizeof( ofn ) );
ofn.lStructSize = sizeof( ofn );
ofn.lpstrFilter = "Text files (*.txt)\0*.txt\0All files\0*.*\0";
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFile = fname;
ofn.lpstrDefExt = "txt";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
string line;
if( GetOpenFileName( & ofn ) )
{
for(int i=0; i<200; i++){
getline(fname, logs[i].numb, ';');
getline(fname, logs[i].names, ';');
getline(fname, logs[i].date, ';');
getline(fname, logs[i].time, ';');
}
}
}
我收到了这个错误 E2285 找不到匹配 'getline<_chart>(char *,undefined,char)'
【问题讨论】:
-
使用
getline读取整行。然后,在该行内,找到分号。 -
logs是vec *的数组,但您没有使用正确的运算符。你应该使用logs[i]->numb。其次,您错误地使用了std::getline(假设是这样)。没有将char[]作为第一个参数的重载。