簡體   English   中英

使用strtok()獲取特定字段

[英]Using strtok() to get specific fields

我目前正在讀取C中的文件,其中包含格式如下的歌曲列表

Track ID<SEP>Song ID<SEP>Artist Name<SEP>Song Title

我正在努力了解如何使用strtok() 獲得<SEP>之后的歌曲藝術家和歌曲標題。

任何幫助將不勝感激。

如果我理解您正在讀取文件中的每一行,然后對它們進行標記以檢索歌曲,藝術家和標題,則在for循環中調用strtok並保持field index將滿足您的需要:

#define MAXS 128
#define MAXL 1024
...
char song[MAXS] = {0};
char artist[MAXS] = {0};
char title[MAXS] = {0};
char buf[MAXL] = {0};
...

while ((fgets (buf, 254, file)) != NULL)
{
    char *p = buf;
    fldidx = 0;     /* field index */

    for (p = strtok (buf, <sep>); p != NULL; p = strtok (NULL, <sep>))
    {
        if (fldidx == 1) strncpy (song, p, strlen (p)+1);
        if (fldidx == 2) strncpy (artist, p, strlen (p)+1);
        if (fldidx == 3) strncpy (title, p, strlen (p)+1);

        fldidx++;
    }
}

根據需要調整MAXSMAXL (退出更改字段的編號和順序:)

注意: <sep>是通用占位符,必須用strtok有效分隔符字符串替換。

將線放入緩沖區后...

char *TrackId = strtok( buffer, "<sep>" );
if( NULL != TrackId )
{
    char *SongID = strtok( NULL, "<sep>: );
    if( NULL != SongID )
    {
        char *ArtistName = strtok( NULL, "<sep>" );
        if( NULL != ArtistName )
        {
            char *SongTitle = strtok( NULL, "<sep>" );
            if( NULL != SongTitle )
            { // then have extracted all fields from line
                // process those fields
            }
         }
     }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM