WordCount 編寫歷程

2022-04-03 03:03:24 字數 4695 閱讀 6445

bluesjiang github

psp2.1

psp階段

預估耗時實際耗時(分鐘)

實際耗時(分鐘)

planning

計畫15

23estimate

估計這個任務需要多少時間

1010

development

開發530

892- analysis

- 需求分析(包括學習新技術)

100339

- design spec

- 生成設計文件

100150

- coding standard

- **規範 (為目前的開發制定合適的規範)108

- design

- 具體設計

3023

- coding

- 具體編碼

200220

- code review

- **複審

3034

- test

- 測試(自我測試,修改**,提交修改)

60120

reporting

報告190

309- test report

- 測試報告

6065

- size measurement

- 計算工作量

1012

- postmortem & process improvement plan

- 事後總結, 並提出過程改進計畫

120232

合計745

1234

首先拿到題目應該是乙個對檔案內容計數的東西,然後要包裝成乙個控制台程式,最後再匯出成exe檔案使其能在windows上執行,因為開發環境是mac,所以要注意檔案分隔符的問題。

從程式的流程來看首先作為乙個控制台程式,那麼首先就是要想辦法處理引數

要求要對檔案進行統計字數,所以肯定要涉及到檔案讀寫

對於匯出成exe,這是用乙個工具能解決的問題,不用擔心

其中要求的-c,-l,-w引數的實現都沒什麼大問題,仔細閱讀後-s,-a,-e的實現要費一些功夫 。

**整體分為三個類:mainargparserwordcounter

主要負責管理整個程式流程的管控,呼叫解析引數函式以及使用wordcount類來統計內容然後輸出。

該類主要包含4個介面:

/*	

* 解析main提供的原始引數列表

* @param args:main函式提供的引數列表

* @return int:成功返回0,解析失敗返回-1

*/public int parse(string args);

/* * 獲取目標檔案,即要分析的檔案,因為有-s引數,所以目標分析檔案有多個

* @return 返回要分析的所有檔案的路徑

*/public string gettarget();

/* * 檢查是否包含有某個引數

* @return 返回要分析的所有檔案的路徑

*/public boolean containskey(string key);

/* * 獲取引數的目標值,即類似-o,-e的輸入檔案

* @return 返回要分析的所有檔案的路徑

*/public string get(string key)

關鍵函式parse()要負責解析各個引數,針對 -o,-e引數的處理,對於有 -s 的選項,生成相應的 target 列表。

wordcounter 類針對每乙個引數設計了乙個介面,分別如下:

/**  所有的引數都是針對被處理的檔案  **/

// 實現 -c 引數

public long countchar(string filename);

// 實現 -e 引數

public void buildescapeword(string filename);

// 實現 -w 引數

public long countwords(string filename);

// 實現 -l 引數

public long countlines(string filename);

// 實現 -a 引數,long陣列分別存放 **行/空行/注釋行

public long countalines(string filename);

1.引數的解析

for (int i = 0; i < args.length; i++)  else 

break;

}} else

}

2.遞迴目錄的詢問

// 內容摘自 wordcount 的 buildtarget

int buildtarget(string path)

if (file.isfile()) }}

} else

return 0;

}

3.-a 引數的處理

public long countalines(string filename) ; // 分別表示 **行/空行/注釋行

try // 匹配注釋開頭

else if (line.charat(i) == '/' && intocomment == false) // 匹配 // 型注釋

else if (line.charat(i+1) == '/' ) else charcount++;

}} // 匹配 */ 以結束注釋塊

else if (line.charat(i) == '*' && intocomment == true)

} else charcount++;

}else }}

// 根據是否有注釋和有效字元來區分該行屬於哪一類

if (charcount == 0) else

} else if (charcount == 1) else lines[1]++;

} else

line = file.readline();

}} catch (ioexception e)

return lines;

}

4.-e 的實現

public void buildescapeword(string filename) 

// 獲取單詞

while(ch != -1 && !issep((char) ch))

this.escapeword.add(word);

if (ch == -1)break;

ch = file.read();

}file.close();

} catch (ioexception e)

}

該函式讀出所有要忽略的單詞,並存在乙個 hashset 中。

countwords()中作如下判斷:

if (this.escapeword != null && this.escapeword.contains(word))
即可達到目的。

首先要使測試能自動化高效的實現,所以首先要設計測試流程,所以需要乙個測試指令碼。

測試的命令如下:

測試目錄結構為:

wc.exe

test\

test_cases\

...test_output\

...test.bat

測試指令碼 test.bat 內容如下:

..\wc.exe -c -l test\test_cases\*.in -a -s -w -o test\test_output\out9.out首先這個測試了一下引數解析和功能實現的完整性,沒有使用錯誤的引數。但是程式設計過程中測試時已經新增錯誤提示並終止程式。

內容統計測試的用例均在 test_case 資料夾中。

Scala編寫WordCount程式

首先對於給定的乙個list陣列 val list list rose is beautiful jennie is beautiful lisa is beautiful jisoo is beautiful 第一步,將list中的元素按照分隔符這裡是空格拆分,然後展開 先map split 將每乙...

Cellular Automata編寫歷程

2016.10.14 完成大致框架編寫,控制台下實現 取點方式 南北半球對稱取點 同一半球同一經度相鄰點之間弧長相等 同一緯度相鄰點之間弧長相等 不同緯度的圓周長度不等 地圖設定為球形 2016.10.25 將每個細胞周圍八個細胞根據其在球體上的不同緯度設定權重 權重公式 為取樣點所對應半徑與南北兩...

LocalDate編寫日曆程式

構造乙個表示當前日期的物件 構造乙個表示給定日期的物件 的到當前日期的年 月和日 得到當前日期是星期幾,作為dayofweek類的乙個例項返回。呼叫 getvalue 來得到 1 7 之間的乙個數,表示這是星期幾,1表示星期一,7表示星期日 生成當前日期之後或之前n天的日期 使用 localdate...