📄 inifile.c
字号:
#define MEMO '#'#include "stdio.h"#include "string.h"#include "stdlib.h"#include "inifile.h"/*功能:在str中是否存在substr返回:substr第一次在str中出现的位置*/int instr(char *str,char *substr){ int i,j; int sublen,flag; if(str==NULL||substr==NULL) return 0; sublen=strlen(substr); flag=0; for(i=0;i<=strlen(str)-sublen;i++) { for(j=0;j<sublen;j++) { if(*(str+i+j)!=*(substr+j)) break; } if(j==sublen) { flag=1; break; } } if(!flag) i=-1; return i;}/*功能:读取某个文件中某个变量的值返回:成功1,失败0*/int readfield(char *filename,char *domain,char *fieldname,char *fieldvalue){ FILE *fp; int len,flag; int i; char tmp[MAXLEN]; char *p,*str,*p2; if((fp=fopen(filename,"r"))==NULL) { return 0; } flag=0; if(domain!=NULL) { while(!feof(fp)) /*Find domain*/ { bzero(tmp,MAXLEN); fgets(tmp,MAXLEN,fp); sprintf(tmp,"%s",trim(tmp)); if(tmp[0]!='[') continue; i=instr(tmp,"]"); if(i>=0) *(tmp+i)='\0'; else continue; if(strcmp(domain,tmp+1)==0) break; } if(feof(fp)) { fclose(fp); return 0; } flag=1; /*Find var in domain*/ } while(!feof(fp)) /*Find variable's value*/ { bzero(tmp,MAXLEN); fgets(tmp,MAXLEN,fp); sprintf(tmp,"%s",trim(tmp)); if(tmp[0]==MEMO||strlen(tmp)<1) continue; if(tmp[0]=='['&&flag) break; for(p=tmp;*p!='\0'&&*p!='#'&&*p!='=';p++); if(*p!='=') continue; *p='\0'; p++; sprintf(tmp,"%s",trim(tmp)); if(strcmp(tmp,fieldname)!=0) continue; str=p; for(;*p!='\0'&&*p!='#'&&*p!='\r'&&*p!='\n';p++); *p='\0'; sprintf(fieldvalue,"%s",trim(str)); fclose(fp); return 1; } fclose(fp); return 0;}/*功能:得到所有域名的列表返回:成功1,失败0*/int getalldomain(char *filename,struct domain *head){ FILE *fp; struct domain *p; char tmp[MAXLEN]; int i; if((fp=fopen(filename,"r"))==NULL) return 0; p=head; bzero(p->dname,MAXLEN); while(!feof(fp)) { bzero(tmp,MAXLEN); fgets(tmp,MAXLEN,fp); sprintf(tmp,"%s",trim(tmp)); if(tmp[0]!='[') continue; i=instr(tmp,"]"); if(i>=0) *(tmp+i)='\0'; else continue; p->next=(struct domain *)malloc(sizeof(struct domain)); p=p->next; bzero(p->dname,MAXLEN); sprintf(p->dname,"%s\0",tmp+1); } p->next=NULL; fclose(fp); return 1;}/*功能:得到某个域中所有的变量列表返回:成功1,失败0*/int getallvar(char *filename,char *domain,struct variable *head){ FILE *fp; struct variable *p; char tmp[MAXLEN]; char *ch; int flag; int i; if((fp=fopen(filename,"r"))==NULL) return 0; flag=0; p=head; bzero(p->val.vname,MAXLEN); bzero(p->val.vval,MAXLEN); if(domain!=NULL) { while(!feof(fp)) /*Find domain*/ { bzero(tmp,MAXLEN); fgets(tmp,MAXLEN,fp); sprintf(tmp,"%s",trim(tmp)); if(tmp[0]!='[') continue; i=instr(tmp,"]"); if(i>=0) *(tmp+i)='\0'; else continue; if(strcmp(domain,tmp+1)==0) break; } if(feof(fp)) { fclose(fp); return 0; } flag=1; /*Find var in domain*/ } while(!feof(fp)) /*Find variable's value*/ { bzero(tmp,MAXLEN); fgets(tmp,MAXLEN,fp); sprintf(tmp,"%s",trim(tmp)); if(tmp[0]==MEMO||strlen(tmp)<1) continue; if(tmp[0]=='['&&flag) break; i=instr(tmp,"="); if(i>0) { ch=tmp+i; *ch='\0'; ch++; } else continue; p->next=(struct variable *)malloc(sizeof(struct variable)); p=p->next; bzero(p->val.vname,MAXLEN); bzero(p->val.vval,MAXLEN); sprintf(p->val.vname,"%s\0",tmp); i=instr(ch,"#"); if(i>=0) *(ch+i)='\0'; sprintf(p->val.vval,"%s\0",ch); } fclose(fp); p->next=NULL; return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -