設計思路:
關鍵是思路,首先知道 單詞, 行,字元, 他們有什麼特點: 1、單詞,標準的是遇到空格後,單詞數,自動加一。 2、行是以\n結束的, 也就是說, 遇到\n行數加一,當然也視你的作業系統而言。3、字元, 空格是否記在裡面? 等因素需要考慮。所以這就要求我們將檔案讀入,逐字檢測,檢測到空格單詞數加一,檢測到回車行數單詞數加一,如果既不是回車也不是空格則說明是字元,字元數加一 程式設計時發現的問題: 以上思路針對的是正常輸入的文字,實際輸入時還會出現種種特殊情況。 1.在一行結束時(換行符之前)出現空格,也就是文字後面加乙個空格再按回車,這種情況會導致單詞數多1。 2.文字結束時沒有按下回車,會導致行數和單詞數少1。 3.連續出現幾個空格,也會導致單詞數增多。
在本次試驗中我在查資料是發現,因為不同的平台對文字檔案換行的處理不一樣,linux以'\n'為換行符,windows以'\n\r'為換行符,mac又以'\r\n'為換行符。所以,使用getc()函式處理換行時比較麻煩,於是我便學習網上」大牛「們,建立緩衝區,fgets()函式用於從檔案中讀取一行或指定個數的字元,其原型為:char * fgets(char *buffer, int size, file * stream);
所以在每一行便進行一次結果統計,最後,將結果統計相加。buffer為緩衝區,用來儲存讀取到的資料。
size為要讀取的字元的個數。如果該行字元數大於size-1,則讀到 size-1 個字元時結束,並在最後補充' \0';如果該行字元數小於等於 size-1,則讀取所有字元,並在最後補充 '\0'。即,每次最多讀取 size-1 個字元。讀取的字元包括換行符。
stream為檔案指標。
首先是開啟檔案fopen(開啟檔案)相關函式open,fclose表頭檔案#include定義函式file * fopen(const char * path,const char * mode);引數path字串包含欲開啟的檔案路徑及檔名,引數mode字串則代表著流形態。
mode有下列幾種形態字串:
r 開啟唯讀檔案,該檔案必須存在。
r+ 開啟可讀寫的檔案,該檔案必須存在。
w 開啟只寫檔案,若檔案存在則檔案長度清為0,即該檔案內容會消失。若檔案不存在則建立該檔案
if( (fp=fopen(filename, "rb")) ==null )
對於perror函式名 功 能: 系統錯誤資訊 用 法: voidperror(char *string);
程式例:
#include int main(void)
在每一行便進行一次結果統計,最後,將結果統計相加。buffer為緩衝區,用來儲存讀取到的資料。size為要讀取的字元的個數。如果該行字元數大於size-1,則讀到 size-1 個字元時結束,並在最後補充' \0';如果該行字元數小於等於 size-1,則讀取所有字元,並在最後補充 '\0'
for(i=0; i)else
if(c!='
\n'&&c!='\r'
) }
對於不是空格單詞數+1
!blank && wnum++;
eof只是為了標識已經讀到檔案末尾,它並不是乙個儲存在檔案中的位元組。所以在判斷檔案是否讀完時不能直接判斷(fgetc()==eof)
而是要賦值之後再進行判斷
intc;c =getc(fp);
while (c !=eof)
Hive應用例項 WordCount
參照書籍 大資料技術原理與應用 準備工作 1.找到所在路徑,啟動hadoop,啟動hive cd usr local hadoop sbin start dfs.sh 啟動hadoop hive 啟動hive 2.準備兩個txt檔案,為詞頻統計準備資料 cd mkdir hivetest 建立hiv...
WordCount程式的簡單解釋
目前使用的hadoop是新架構,api與舊版本的也不一樣。新版的api是在org.apache.hadoop.mapreduce,舊版api是在org.apache.hadoop.mapred中。新版api不相容舊版api。主要改變 2 更廣泛的使用了context物件,並使用mapcontext進...
wordcount例子程式
hadoop 0.20.1裡的wordcount源 與0.19.2已經有較大的區別了。在新版本的hadoop中,org.apache.hadoop.mapred包被org.apache.hadoop.mapreduce所取代。不過為了保持相容性,org.apache.hadoop.mapred還是存...