[英]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++;
}
}
根據需要調整MAXS
, MAXL
。 (退出更改字段的編號和順序:)
注意: <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.