亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 通用c語言函數:文本文件有關操作,.cfg.ini類配置文件讀寫.txt

?? 哈哈通用C語言函數
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
C源碼:通用C語言函數:文本文件有關操作,.CFG/.INI類配置文件讀寫 

/* 
通用C語言函數:文本文件有關操作,.CFG/.INI類配置文件讀寫。我們知道WINDOWS下的軟件可以使用.INI文件 
處理程序配置,那么在DOS、UNIX、AS/400上又如何才能讀寫.CFG/.INI類配置文件? 你可以使用本程序的有關函 
數很方便地實現。注:AS/400上輸入和顯示[]有些問題,所以用{}代替來將section名括起。 

   GCFTXTF.C -- General C functions for Text File Read/Write 
   M.L.Y  2000.1.1 

   MODIFIED   (YYYY.MM.DD) 
    M.L.Y      2000.01.01 -  Creation 
*/ 

#if __OS400__                         /* AS/400 */ 
  #include "GCFTXTFH" 
#else 
# include "GCFTXTF.H" 
#endif 

struct txt_line_flds txt_line_fld[MAX_TXT_LINE_FLD]; 
char CFG_ssl = '[', CFG_ssr = ']';  /* .CFG/.INI file section symbol */ 
int  CFG_section_line_no, CFG_key_line_no, CFG_key_lines; 

/* ------------------------------------------------------------------------- */ 
int  fgetline(FILE *fp, USGC *buffer, int maxlen) 
/* 
   Read 1 line text into *buffer from file *fp, return length actually read. 
   maxlen --- max. length of *buffer 
   CR or LF is not put into *buffer 
   FF(0x0C) is put into *buffer and then return 
   Ctrl-Z(0x1A) is put into *buffer and then return 
   If EOF was detected then return -1 
   If an error occurred then return -2 
   M.L.Y  1995.06.09, 07.31, 1998.9.9 
*/ 
{ 
#if __OS400__                         /* AS/400 */ 
  int  i; 

  memset(buffer, 0x00, maxlen); 
  if(fgets(buffer, maxlen, fp) == NULL) 
  { 
    i = strlen(buffer); 
    if(feof(fp) != 0) 
    { 
      if(i == 0) return -1;                 /* EOF */ 
    } 
    else return -2;                         /* error */ 
  } 
  i = strlen(buffer); 
  if(i > 0 && buffer[i-1] == '\n') 
    buffer[--i] = '\0'; 
  return i; 
#else 
  int  i, j; 
  USGC ch1; 

  for(i = 0, j = 0; i < maxlen; j++) 
  { 
    if(fread(&ch1, sizeof(USGC), 1, fp) != 1) 
    { 
      if(feof(fp) != 0) 
      { 
        if(j == 0) return -1;               /* EOF */ 
        else break; 
      } 
      if(ferror(fp) != 0) return -2;        /* error */ 
      return -2; 
    } 
    else 
    { 
      if(ch1 == '\n' || ch1 == 0x00) break; /* end of line */ 
      if(ch1 == '\f' || ch1 == 0x1A)        /* '\f': Form Feed */ 
      { 
        buffer[i++] = ch1; 
        break; 
      } 
      if(ch1 != '\r') buffer[i++] = ch1;    /* ignore CR */ 
    } 
  } 
  buffer[i] = '\0'; 
  return i; 
#endif 
} 

/* ------------------------------------------------------------------------- */ 
int  copy_txt_file(void *source_file, void *dest_file) 
/* 
   Copy source_file to dest_file 
   Return code: 
      0 -- Ok 
     <0 -- Error 
   M.L.Y  1996.7, 2000.11 
*/ 
{ 
  FILE *fp1, *fp2; 
  USGC buf[1024+1]; 
  int  rc; 

  if((fp1 = fopen((char *)source_file, "r")) == NULL) 
    return COPYF_ERR_OPEN_FILE; 
  rc = COPYF_ERR_CREATE_FILE; 
#if __OS400__                         /* AS/400 */ 
  if((fp2 = fopen((char *)dest_file, "w, lrecl=92, ccsid=935")) == NULL) 
    goto copy_end; 
#else 
  if((fp2 = fopen((char *)dest_file, "w")) == NULL) goto copy_end; 
#endif 
  while(1) 
  { 
    rc = COPYF_ERR_READ_FILE; 
    memset(buf, 0x00, 1024+1); 
    if(fgets((char *)buf, 1024, fp1) == NULL) 
    { 
      if(mstrlen(buf) == 0) 
      { 
        if(ferror(fp1) != 0) goto copy_end; 
        break;                                   /* EOF */ 
      } 
    } 
    rc = COPYF_ERR_WRITE_FILE; 
    if(fputs((char *)buf, fp2) == EOF) goto copy_end; 
  } 
  rc = COPYF_OK; 
copy_end: 
  if(fp2 != NULL) fclose(fp2); 
  if(fp1 != NULL) fclose(fp1); 
  return rc; 
} 

/* ------------------------------------------------------------------------- */ 
int  split_txt_line_fld(char *txt_line, char *sep_chars) 
/* 
   Split a text line fields info to struct txt_line_fld 
   Return fld number 
   e.g.: fld1 = fld2, fld3, "fld4", 'fld5' 
         key = value 

   M.L.Y  2000.8.2 
*/ 
{ 
  int  i, j, k, n, stat = 0, quote_stat = 0; 
  char quote; 

  n = strlen(txt_line); 
  for(i = 0, j = 0, k = 0; i <= n; i++) 
  { 
    if(i >= n || 
       (strchr(sep_chars, txt_line[i]) != NULL && quote_stat == 0)) 
    { 
      if(stat == 0) continue; 
      stat = 0;                         /* is separate char */ 
      txt_line_fld[k].fldsp = j; 
      txt_line_fld[k].fldlen = i - j; 
      k++; 
    } 
    else 
    { 
      if(txt_line[i] == '\'' || txt_line[i] == '\"') 
      { 
        if(quote_stat == 0) 
        { 
          quote = txt_line[i];          /* " or ' */ 
          quote_stat = 1;               /* enter " " or ' ' */ 
        } 
        else 
        { 
          if(txt_line[i] == quote) 
            quote_stat = 0;             /* withdraw from " " or ' ' */ 
        } 
      } 
      if(stat == 1) continue; 
      stat = 1;                         /* is normal char */ 
      j = i;                            /* fld start pointer */ 
    } 
  } 
  return k;                             /* fld number */ 
} 

/* ------------------------------------------------------------------------- */ 
char *get_txt_line_fld(char *txt_line, int fldno, char *buf) 
/* 
   After split a text line fields info to struct txt_line_fld, 
   get the fldno fld to buf 
   Return buf 

   M.L.Y  2000.8.2 
*/ 
{ 
  memmove(buf, txt_line + txt_line_fld[fldno].fldsp, 
          txt_line_fld[fldno].fldlen); 
  buf[txt_line_fld[fldno].fldlen] = '\0'; 
  return buf; 
} 

/* ------------------------------------------------------------------------- */ 
int  split_key_val(USGC *buf, USGC **key, USGC **val) 
/* 
   Split key=val pair: 
   xxx    =   yyyyyyyy 
   |      |   | 
   k1     k2  i 
   return: 
     1 --- ok 
     0 --- blank line 
    -1 --- no key, "= val" 
    -2 --- only key, no '=' 

   M.L.Y  2000.8, 2000.11 
*/ 
{ 
  int  i, k1, k2, n; 

  if((n = strlen((char *)buf)) < 1) return 0; 
  for(i = 0; i < n; i++) 
    if(buf[i] != ' ' && buf[i] != '\t') break; 
  if(i >= n) return 0; 
  if(buf[i] == '=') return -1; 
  k1 = i; 
  for(i++; i < n; i++) 
    if(buf[i] == '=') break; 
  if(i >= n) return -2; 
  k2 = i; 
  for(i++; i < n; i++) 
    if(buf[i] != ' ' && buf[i] != '\t') break; 
  buf[k2] = '\0'; 
  *key = buf + k1; 
  *val = buf + i; 
  return 1; 
} 

/* ------------------------------------------------------------------------- */ 
int  CFG_get_key(void *CFG_file, void *section, void *key, void *buf) 
/* 
   Note: 
    section --- not include [] or {} 
    key     --- may include blank space 
    blank line or begin with ';' for remarks 
    line end with '+' for line to be continued 

   Return: 
     0 --- ok 
    <0 --- error 
*/ 
{ 
  FILE *fp; 
  USGC buf1[MAX_CFG_BUF + 1], buf2[MAX_CFG_BUF + 1]; 
  USGC *key_ptr, *val_ptr; 
  int  line_no, n, rc; 

  line_no = 0; 
  CFG_section_line_no = 0; 
  CFG_key_line_no = 0; 
  CFG_key_lines = 0; 
#if __OS400__                         /* AS/400 */ 
  if((fp = fopen((char *)CFG_file, "r")) == NULL) return CFG_ERR_OPEN_FILE; 
#else 
  if((fp = fopen((char *)CFG_file, "rb")) == NULL) return CFG_ERR_OPEN_FILE; 
#endif 
  while(1)                                       /* seek section */ 
  { 
    rc = CFG_ERR_READ_FILE; 
    n = fgetline(fp, buf1, MAX_CFG_BUF); 
    if(n < -1) goto r_cfg_end; 
    rc = CFG_SECTION_NOT_FOUND; 
    if(n < 0) goto r_cfg_end;                    /* EOF, not found */ 
    line_no++; 
    n = mstrlen(ltrimstr(rtrimstr(buf1))); 
    if(n == 0 || buf1[0] == ';') continue;       /* blank/remarks line */ 
    rc = CFG_ERR_FILE_FORMAT; 
    if(n > 2 && ((buf1[0] == '[' && buf1[n-1] != ']') || 
                 (buf1[0] == '{' && buf1[n-1] != '}'))) 
      goto r_cfg_end; 
    if(buf1[0] == '[' || buf1[0] == '{') 
    { 
      buf1[n-1] = 0x00; 
      if(mstrcmp(buf1+1, section) == 0) 
        break;                                   /* section found */ 
    } 
  } 
  CFG_section_line_no = line_no; 
  while(1)                                       /* seek key */ 
  { 
    rc = CFG_ERR_READ_FILE; 
    n = fgetline(fp, buf1, MAX_CFG_BUF); 
    if(n < -1) goto r_cfg_end; 
    rc = CFG_KEY_NOT_FOUND; 
    if(n < 0) goto r_cfg_end;                    /* EOF, key not found */ 
    line_no++; 
    CFG_key_line_no = line_no; 
    CFG_key_lines = 1; 
    n = mstrlen(ltrimstr(rtrimstr(buf1))); 
    if(n == 0 || buf1[0] == ';') continue;       /* blank/remarks line */ 
    rc = CFG_KEY_NOT_FOUND; 
    if(buf1[0] == '[' || buf1[0] == '{') goto r_cfg_end; 
    if(buf1[n-1] == '+')                         /* to be continued */ 
    { 
      buf1[n-1] = 0x00; 
      while(1) 
      { 
        rc = CFG_ERR_READ_FILE; 
        n = fgetline(fp, buf2, MAX_CFG_BUF); 
        if(n < -1) goto r_cfg_end; 
        if(n < 0) break;                         /* EOF */ 
        line_no++; 
        CFG_key_lines++; 
        n = mstrlen(rtrimstr(buf2)); 
        rc = CFG_ERR_EXCEED_BUF_SIZE; 
        if(n > 0 && buf2[n-1] == '+')            /* to be continued */ 
        { 
          buf2[n-1] = 0x00; 
          if(mstrlen(buf1) + mstrlen(buf2) > MAX_CFG_BUF) 
            goto r_cfg_end; 
          mstrcat(buf1, buf2); 
          continue; 
        } 
        if(mstrlen(buf1) + mstrlen(buf2) > MAX_CFG_BUF) 
          goto r_cfg_end; 
        mstrcat(buf1, buf2); 
        break; 
      } 
    } 
    rc = CFG_ERR_FILE_FORMAT; 
    if(split_key_val(buf1, &key_ptr, &val_ptr) != 1) 
      goto r_cfg_end; 
    ltrimstr(rtrimstr(key_ptr)); 
    if(mstrcmp(key_ptr, key) != 0) 
      continue;                                  /* not same key */ 
    mstrcpy(buf, val_ptr); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
92国产精品观看| 国产精品久久久久久久久动漫 | 国产精品18久久久久久久久| 亚洲mv在线观看| 亚洲成av人影院在线观看网| 亚洲一级二级三级在线免费观看| 亚洲综合在线五月| 亚洲国产中文字幕在线视频综合| 亚洲一级在线观看| 偷拍亚洲欧洲综合| 青青草国产成人av片免费| 日韩福利电影在线观看| 久久草av在线| 国产成人自拍高清视频在线免费播放| 国产成人午夜精品影院观看视频 | 91免费小视频| 色综合久久久网| 欧美日韩一本到| 91精选在线观看| 久久综合视频网| 日本一二三不卡| 亚洲欧美日韩国产综合| 亚洲综合丁香婷婷六月香| 日韩电影在线一区二区三区| 国模无码大尺度一区二区三区| 国产在线一区二区| 成人激情校园春色| 欧美综合一区二区| 欧美一区国产二区| 久久久国产精品麻豆| 中文字幕在线观看一区| 亚洲图片自拍偷拍| 久久99在线观看| av毛片久久久久**hd| 色婷婷综合激情| 日韩一区二区高清| 国产精品色眯眯| 亚洲一区二区不卡免费| 国内精品嫩模私拍在线| 色综合中文综合网| 日韩激情在线观看| 国产成人丝袜美腿| 精品国产一区久久| 综合久久给合久久狠狠狠97色| 午夜一区二区三区视频| 国产精品一区一区| 色视频一区二区| 精品国产亚洲在线| 亚洲激情图片小说视频| 狠狠色狠狠色综合系列| 91国产精品成人| 欧美精品一区二区高清在线观看| 国产精品不卡在线| 蜜桃久久精品一区二区| 色综合久久久网| 久久只精品国产| 亚洲欧美电影一区二区| 蜜桃传媒麻豆第一区在线观看| 99这里都是精品| 欧美电视剧在线看免费| 亚洲精品老司机| 国产一区二区三区观看| 欧美精品黑人性xxxx| 国产精品国产三级国产三级人妇| 美女一区二区久久| 色一情一乱一乱一91av| 久久久亚洲高清| 亚洲成av人在线观看| 99久久综合色| 久久久噜噜噜久久中文字幕色伊伊 | 一本大道久久精品懂色aⅴ| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲高清在线精品| av电影天堂一区二区在线| 久久亚洲一级片| 琪琪一区二区三区| 欧美三级日韩在线| 亚洲激情男女视频| 成人精品在线视频观看| 久久久综合精品| 日韩国产成人精品| 欧美人与性动xxxx| 亚洲一区二区视频在线| 一本色道久久综合精品竹菊| 国产女主播视频一区二区| 极品少妇xxxx偷拍精品少妇| 欧美一区二区精品久久911| 亚洲综合一区二区精品导航| 91一区二区在线| 国产精品久久午夜夜伦鲁鲁| 国产精品一级二级三级| www激情久久| 欧美午夜精品免费| 国产精品毛片无遮挡高清| 国产精品亚洲第一| www激情久久| 国产一区二区三区精品欧美日韩一区二区三区| 91精品久久久久久蜜臀| 视频一区中文字幕| 欧美乱熟臀69xxxxxx| 亚洲国产精品欧美一二99| 91久久国产最好的精华液| 亚洲人成网站影音先锋播放| 91在线视频免费91| 一区二区三区中文在线| 欧美综合天天夜夜久久| 亚洲午夜久久久久久久久电影院| 色噜噜久久综合| 亚洲国产精品一区二区www| 欧美日韩在线直播| 午夜欧美2019年伦理| 6080午夜不卡| 久久精品国产亚洲a| 精品国产电影一区二区| 国产精品影视在线| 中文字幕av一区二区三区| 99久久国产免费看| 一二三四社区欧美黄| 欧美电影影音先锋| 精品一区二区三区在线观看国产 | 中文字幕乱码一区二区免费| 不卡视频在线看| 亚洲自拍都市欧美小说| 91精品国产一区二区三区| 久久精品免费观看| 日本一区二区免费在线| 99国产欧美久久久精品| 洋洋成人永久网站入口| 91精品国产综合久久婷婷香蕉| 久久精品国产网站| 日本一区二区免费在线观看视频 | 开心九九激情九九欧美日韩精美视频电影 | 肉肉av福利一精品导航| 欧美电影免费观看高清完整版在线 | 久久久久高清精品| 91尤物视频在线观看| 亚洲国产视频一区| 制服.丝袜.亚洲.另类.中文| 国产精品一区二区在线观看不卡| 国产精品免费人成网站| 欧美视频一区二区三区在线观看| 奇米一区二区三区| 国产精品免费av| 欧美一区中文字幕| 成人福利视频在线看| 亚洲v日本v欧美v久久精品| 久久综合久久鬼色中文字| 91丨九色丨蝌蚪富婆spa| 日日夜夜一区二区| 欧美激情在线免费观看| 欧美日韩国产精选| 高清日韩电视剧大全免费| 亚洲国产色一区| 久久久久久久av麻豆果冻| 精品成人私密视频| 欧美在线一区二区| 国产资源在线一区| 亚洲国产一区二区a毛片| 久久精品亚洲麻豆av一区二区| 91官网在线免费观看| 国产尤物一区二区| 亚洲一区二区在线视频| 国产亚洲一区字幕| 91精品国产91久久综合桃花| 成人app在线观看| 精品一区二区在线观看| 亚洲一区在线观看视频| 欧美国产精品专区| 91精品国产入口在线| 91丨porny丨户外露出| 国产一区二区三区| 石原莉奈在线亚洲二区| 亚洲少妇最新在线视频| 久久久久久夜精品精品免费| 69堂国产成人免费视频| 日本黄色一区二区| 国产·精品毛片| 国产又黄又大久久| 免费欧美日韩国产三级电影| 亚洲国产欧美一区二区三区丁香婷| 国产精品午夜免费| 久久久久久黄色| 日韩欧美国产一二三区| 欧美日韩午夜在线视频| 色综合久久88色综合天天| 成人蜜臀av电影| 国精产品一区一区三区mba桃花| 丝袜脚交一区二区| 一区二区三区日本| 亚洲日本va在线观看| 欧美国产日产图区| 久久久激情视频| 久久久久国色av免费看影院| 日韩精品一区在线观看| 91精品午夜视频| 3d动漫精品啪啪一区二区竹菊| 欧美色图免费看| 欧美日韩在线不卡| 99视频一区二区三区| 国产69精品久久久久777|