[英]Parsing specific formatted files in C
我想在C程序中解析一個文本文件。 該文件包含的數據可能是:
block1=
{
a="some text with space and double quota"
b=random text
c=random text
d=random text
e=random text
f="number"
g=number
}
block2=
{
a="some text with space and double quota"
b=random text
c=random text
d=random text
e=random text
f="number"
g=number
}
可能有n個塊,我想創建元素列表(每個塊的“ a”元素),為此我該怎么辦? C中是否有用於文本文件的解析API?
我不知道C中是否有這樣的API。但是我認為您可以自己編寫一些代碼。
創建一個以元素為塊的結構(a,b,c,d,e,f為字符串,g為int)。 具有該結構的數組。 並有一個字符串數組。 使用fread讀取文件,直到文件結尾。 之后,將struct數組的每個元素的所有“ a”元素存儲在字符串數組中。
如果您需要特定的代碼,請給我您描述的示例文本文件。 我將編寫代碼並為您發布。
#include <stdio.h>
#include <string.h>
typedef struct block {
char head[8];
char braze[2];
char a[46];
char b[18];
char c[18];
char d[18];
char e[18];
char f[15];
char g[13];
char close_braze[2];
} block;
int main () {
int i, ret;
char a_elm[10][50];
FILE *fp;
block blk[10]; //use a specific number if you know. or go for linked list
fp = fopen ("one.txt","r");
for (i = 0; i < 11; i++) {
ret = fread ((void *) &blk[i], sizeof (block), 1, fp);
if (!ret)
break;
}
fclose (fp);
for (ret = i, i = 0; i < ret; i++) {
strncpy (a_elm[i], blk[i].a, 46);
a_elm[i][46] = '\0';
printf ("%s\n", a_elm[i]);
}
return 0;
}
對於固定格式的代碼,fread可以如上所述使用,或者您必須將fscanf與某些字符串函數一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.