對文件中的數(shù)據(jù)進(jìn)行對比,這個程序很實用啊.
復(fù)雜倒是不復(fù)雜.
首先讀取參數(shù).如果碰到'-'((*++argv)[0]這個是下一個參數(shù)的首字符).
然后讀取'-'后面的字符(*++argv[0]沒有括號,這個是剛才參數(shù)的下一個字符,因為argv和[0]先結(jié)合為數(shù)組第0位,然后才自增.)
然后switch對讀取的參數(shù)進(jìn)行判斷然后進(jìn)行記錄.x(except是反向選擇的意思,如果有這個標(biāo)記將打印除了參數(shù)的那一行.)和n顯示行號的選項。
程序需要argc >= 2,程序名加需要查找的句子。
判斷參數(shù)剩余個數(shù),小于1的話是只有一個程序名而沒有要查找的內(nèi)容(前面找參數(shù)的循環(huán)體判斷式中有--argc自減),輸出提示信息。
我研究了半天這個pattern是什么。翻譯的真難看,這個單詞應(yīng)該是需要查找的內(nèi)容的意思。竟然被翻譯成了模式。
正常運行argc最少等于2.前面已經(jīng)自減過了這里就等于1,這里就剩下了那個需要查找的句子。把這個句子復(fù)制到pattern
如果不等于1那就說明后面還有參數(shù),而這個參數(shù)就是需要查找的文件的文件名。
這個是有一個文件名執(zhí)行一次循環(huán),查找該文件。
首先進(jìn)行判斷是否能打開文件,發(fā)生錯誤退出并顯示錯誤信息。
然后調(diào)用fpat函數(shù)。
函數(shù)很簡單。
fgets讀取輸入行,然后通過strstr函數(shù)進(jìn)行判斷。
而是否輸出是看strstr函數(shù)的返回值與那個except參數(shù)是否設(shè)置。
如果找到匹配行,strstr返回1,如果except為1(反向選擇參數(shù)設(shè)置)。
那么判斷式為假,不執(zhí)行操作。
如果找到匹配行,strstr返回1,如果except為0(未設(shè)置參數(shù))。
判斷式為真,執(zhí)行語句。輸出該行。
如果未找到匹配行,strstr返回0,如果except為1(反向選擇參數(shù)設(shè)置)。
那么判斷式為真,執(zhí)行語句,輸出該行。
如果未找到匹配行,strstr返回0,如果except為0(反向選擇參數(shù)未設(shè)置)。
那么判斷式為假,不執(zhí)行操作。
書上的翻譯太次了。根本不知道講的是什么。