2018年4月15日 星期日

Parse file in c, fopen, fgets, fgetc(如何使用c語言解析檔案)


最近因為寫tool時,需求要去Parse 檔案理面的字串,只用到fopen, fgetc和fgets三個function就達成了,這三個function在stdio.h這個header file有提供,所以必須在code裡include stdio.h,首先先介紹這三個function


- fopen(), open file
函式原型: FILE * fopen(const char *file, const char *mode)

輸入參數有兩個,一個為file的名稱,一個為開啟file的模式
mode 的主要輸入參數如下:
  'r': Open for reading
  'w': Open for writing
  'a': Open for appending
mode 的次要輸入參數如下:
  '+': Open for reading and writing
  'f': No delay
  'b' Open in binary mode

- fgetc(), 一次讀取一個字元
函式原型: int fgetc(FILE *fp)
這邊要注意的是fgetc所回傳的是一個int的型態,每當執行一次,file指標就會+1,也就是說下一次再執行fgetc,就會得到下一個字元

- fgets(), 一次讀取一行字串
函式原型: char * fgets(char *buf, int n, FILE *fp)
每當執行結束後,file指標會一直+1直到遇到 '\n' 就停止,原因是因為換行符號為'\n'

Example:


#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { FILE *Sc; int ch=0; char str[100]={0}; //Open file and check whether file existed if((Sc = fopen("Hello.txt", "rt")) == NULL) { printf("Error Openning File!!\n"); return 1; } //Fetch one line by fgets fgets(str, sizeof(str), Sc); printf("%s", str); //Fetch one character by fgetc while(!feof(Sc)) { ch = fgetc(Sc); printf("%c", ch); } //Close File fclose(Sc); printf("\n"); system("pause\n"); return 0; }



























Hello.txt:

Hello world for fgets!! Hello world for fgetc!!

Result:



沒有留言:

張貼留言

解析 NVM Express - 透過Linux OS 解析M.2 NVMe SSD

在之前,我撰寫了三篇有關NVMe的文章 ,分別是" 原理NVM Express - NVMe Submission Queue & Completion Queue (SQ & CQ) "、" 原理NVM Express - Admi...