![](/img/trans.png)
[英]Trying to read data from a file and tokenize it in c using strtok() and fgets()
[英]get values from fgets using strtok
我每隔10秒就會從外部計算機(總是4行)接收一些數據,例如:
Yesterday match:
Player_1:(P=31,Reb=12)
Yesterday match:
Player_2:(P=12,Reb=2)
我有以下代碼讀取數據(我也打開並配置了串行端口功能):
int learn_data(int fd)
{
int n,i;
char buff[200];
memset(buff, 0, sizeof(buff));
char* ptr;
FILE *fp=fdopen(fd,"r");
while(fgets(buff, sizeof(buff), fp) != NULL)
{
printf("%s", buff);
}
}
使用此代碼,fgets逐行讀取緩沖區。 現在我的問題是,如何使用strtok獲得點和反彈的值(31,12),(12,2)等? 如何逃脫第一和第三行?
如果輸入格式正確,則可以使用sscanf()
。 請嘗試以下操作:
int P, Reb;
sscanf(buff, "%*7s%*d%*4s%d%*5s%d", &P, &Reb);
要僅處理Player*
,可以先執行memcmp()
。 喜歡,
if(memcmp(buff, "Player_", 7) == 0) ...
這取決於播放器名稱的格式-名稱是否特別包含空格。 我可能會使用:
while (fgets(buff, sizeof(buff), fp))
{
int points, rebounds;
if (sscanf(buff, "%100[^(](P=%d,Reb=%d)", &points, &rebounds) == 2)
...process a valid entry...
}
這將有效地跳過奇數行(具有匹配信息的奇數行),並且僅處理具有名稱以及得分和籃板數字的奇數行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.