【发布时间】:2015-09-22 21:59:23
【问题描述】:
我有一个包含日期的 CSV 文件(我从 excel 转换而来),但我无法使用 strtok 函数解析它们。当我从 CSV 文件中删除带有日期的列时,它可以正常工作,但否则会出现错误。我已经玩了几个小时,但错误不会消失。我非常感谢任何帮助/建议!我是一个编程初学者。这是我所拥有的(粗体部分是我为程序工作而取出的部分,CSV 文件中没有日期):
void parseFile (ifstream &myfile) {
string line;
int n = 1;
while ( myfile.good() ) {
//storing each line into char array
getline(myfile,line);
char data[100];
for (int g = 0; g <= line.size(); g++) {
data[g] = line[g];
}
//using strtok to read char array
char * tok;
tok = strtok (data,",");
while (tok != NULL) {
temp.patientID = atol(tok);
tok = strtok(NULL, ",");
temp.result = atof(tok);
tok = strtok(NULL, ",");
tok = strtok(NULL, "/");
tok = strtok(NULL, "/");
temp.date = atof(tok);
tok = strtok(NULL, " ");
tok = strtok(NULL, ":");
tok = strtok(NULL, ":");
temp.time = atof(tok);
tok = strtok(NULL, ",");
//getting each component and storing into map that stores parsed info, mymap
mymap.insert (pair<int,testInfo>(n,temp));
n++;
}
}
}
我的CSV 文件如下所示:
1000856,0,28/09/2014 02:34:37
1002259,0.008,15/09/2014 23:14:11
1002259,0.002,18/09/2014 10:44:18
1002259,0.005,18/09/2014 16:54:52
1003348,0.038,20/03/2015 12:50:46
【问题讨论】:
-
尝试将 strtok 更改为
strsep,如果可行,请告诉我。 -
您可能会发现 boost 库对这类事情很有用 - 特别是 stackoverflow.com/questions/5734304/c-boost-split-string 以及 boost
date_time库
标签: c++ date parsing csv strtok