2013-12-13 321 views
1

我正在創建一個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

然後,你會再打電話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

好的也擺脫了無意義的'while'和'break'。 –

+0

感謝您的支持 - 當我嘗試執行時,我的程序現在崩潰了。我更新了原始問題中的代碼。 –

+0

@DustinCook:不客氣。 – David

1

使用NULL指針而不是字符串調用函數strtok以獲取下一個結果。

請記住C庫有一個狀態。它會記住最後一個令牌並將其用於進一步調用。因此,當您開始「標記化」時,您無法返回下一個','分隔的標記。

if (sch != NULL) 
{ 
    sch = strtok(line, " "); 
    time_section = strtok(NULL, " "); 
} 
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 
    ...