我正在创建一个C程序,它逐行读取CSV文件。所以每一行的分配如下:
sch = strtok (line,",");
第一个令牌(只需要一个)是表格中的日期时间戳:2013-12-13 09:15:00.000
如何使用空格将此标记拆分为仅存储标记09:15:00.000
的时间部分?
感谢您的帮助 - 我在这里更新了我的代码以反映下面建议的更改,但是当您尝试执行时我的程序崩溃了:
while ( fgets (line, 512, file) != NULL )
{
sch = strtok (line,",");
if (sch != NULL)
{
sch = strtok (line," ");
sch = strtok (NULL," ");
fputs(sch,filetwo);
fputc('\n',filetwo);
break;
}
sch = strtok (NULL, ",");
}
答案 0 :(得分:3)
然后,您将再次致电strtok
。见下文,
while ( fgets (line, 512, file) != NULL )
{
char * tmp = strtok (line,",");
if (tmp != NULL)
{
sch = strtok (tmp," ");
sch = strtok (NULL," ");
fputs(sch,filetwo);
fputc('\n',filetwo);
}
}
答案 1 :(得分:1)
使用NULL指针而不是字符串调用函数strtok
以获得下一个结果。
请记住C库有一个状态。它会记住最后一个令牌并将其用于进一步的呼叫。因此,当您启动''标记化时,您无法返回下一个','分隔的标记。
if (sch != NULL)
{
sch = strtok(line, " ");
time_section = strtok(NULL, " ");
}
答案 2 :(得分:0)
你可以做这样的事情,没有必要使用strtok()
,因为你只需要第一个csv字段。
while ( fgets (line, 512, file) != NULL )
{
char* datetime = strchr(line,",");
if (datetime != NULL)
{
char *spc = strchr( datetime, ' ' ); // find space
if ( spc != NULL )
{
char* timeonly = spc + 1; // move past spc, point to time part
...