解析一个解析的字符串

时间:2013-12-13 09:16:46

标签: c parsing csv

我正在创建一个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, ",");
}

3 个答案:

答案 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
    ...