我有一些巨大的csv文件并尝试读取文件,在一个数据库中解析和写入。 csv格式如下:
EUR/USD 20100103 21:27:59.694 1.43067 1.43097
EUR/USD 20100103 21:27:59.732 1.43075 1.43095
EUR/USD 20100103 21:28:08.152 1.43078 1.43099
EUR/USD 20100103 21:28:16.897 1.43076 1.43102
EUR/USD 20100103 21:28:28.757 1.43071 1.43101
EUR/USD 20100103 21:29:07.659 1.43071 1.43106
我的C ++代码是:
void Read(char* fileName){
FILE * pFile;
long lSize;
char * buffer;
size_t result;
pFile = fopen (fileName , "rb" );
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
cout<<lSize<<"\n";
rewind (pFile);
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
char * pch;
pch = strtok (buffer,"\n");
while (pch != NULL) {
Parsing(pch);
pch = strtok (NULL, "\n");
}
free (buffer);
fclose (pFile);
}
void Parsing(char* tmpp){
char * pch;
pch = strtok (tmpp,",");
char temp[256];
strcpy(temp, "INSERT INTO dukas VALUES('" );
while (pch != NULL) {
cout<<pch<<"\n";
pch = strtok (NULL, ",");
}
}
问题是这个文件,只读取第一行而不能移动到第二行。 这个脚本中的任何错误? 的问候,
答案 0 :(得分:0)
在单个线程中的strtok:上的MSDN中,交错调用其中一个函数极有可能产生数据损坏和不准确的结果。解析不同的字符串时,在开始解析下一个之前完成解析一个字符串。
这正是你正在做的事情:你有一个strtok阅读线,Parsing
函数内的另一个解析字段。