Linux下字串解析的一些方法__Linux

來源:互聯網
上載者:User
轉自:http://blog.chinaunix.net/uid-25808509-id-2930277.html
在linux下編程時,有時候我們需要擷取shell命令的執行結果,一種比較笨的方法是將shell命令的執行結果儲存到檔案,然後在讀檔案,讀完之後,再刪除檔案,或者使用臨時檔案也行。這種方法比較繁瑣,我推薦的一種方法是使用popen函數,FILE *popen(const char *command, const char *type),比如我要擷取ls -l的結果,我們可以這樣做 FILE *stream;

if((stream = popen("ls -l"), r) == NULL)
{
    perror("popen");
    exit(1);
}

char buf[256];

while(fgets(buf, 256, stream) != NULL)
{
    ...
}

pclose(stream);    這樣就擷取了每一行的資料   在擷取了這些資料之後,我們有時候需要對這些資料進行解析,比如從這些字元資料中讀出某些資料,這時候 strstr,strchr,strrchr,sscanf這些函數就很有用了。    (1) char* strstr(char* str, char* substr);   strstr函數返回str中第一次出現substr的指標.     比如有這樣一個字串 str = "TotalMem:1800 FreeMem:800  swapMem:500"     你想讀出FreeMem的值,你就可以這樣做     char *p = strstr(str, "FreeMem:");     int freeMem;     sscanf(p+ strlen("FreeMem:"), "%d", &freeMem);   這裡用到了sscanf,下面再講.    (2) char *strchr(char *s,char c);   strchr函數返回字串s中首次出現字元c的指標,   char *s="We are Chinese!";
  char *p;   p = strchr(s, 'C')        (3) char *strrchr(char *str, char c);     strrchr函數返回字串str從右面算起首次出現字元c的指標,比如我們要從一個路徑字串中解析出檔案的名字    char *path = "/home/liming/123.txt"       char *fileName = strrchr(path, '/') + 1;
(4) int sscanf(const char *buffer,const char *format[,argument ]...);    sscanf 可以從字元buffer中讀進與指定格式相符的資料,這樣在字串解析式就非常有用    1.比如:    char *str = "Jan 18 2006";    你要將年月日分割出來,就可以這樣      int day;    int year;    char month[4];    sscanf(str, "%s %d %d", month, &day, &year);    2.非常方便,又比如    char *str = "Jan 02 02:02:02 2000"    你要將資料分離出來        int year;    char month[4];    int day;    int hour;    int min;    int sec;      sscanf(str, "%s %2d %2d:%2d:%2d %d", month, &day, &hour, &min, &sec, &year);    3.sscanf不一定一空格為分隔字元,比如一個字串一逗號‘,’分割資料時    char *str = "werwe,124,455,23234";    char buf[10];    int a1,a2,a3;    sscanf(str, "%[^,],%d,%d,%d", buf, &a1,&a2,&a3);    [^,]表示遇到字元‘,’時結束    4.有時候我們不一定要讀所有的資料,可能會跳過一些資料,這時可以用%*      char *str = "hi 124 iu  233.3 34"      如果我們只需讀第四和第五個資料時      double a4;    int a5;    sscanf(str, "%*s %*d %*s %f %d", &a4, &a5);      %*表示略過

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.