關於wc.exe程序處理文件字符,單詞數,行數
Gitee項目地址:https://gitee.com/xiecangxing/wc.git
本項目我只實現了基本功能,也就是文件的字符總數,單詞總數,以及行數的計算,以及輸出至哪個文件
並且直接使用C#語言進行編寫
整個項目我集中在一個主類和一個主方法當中
以及十個方法,分別完成相應的任務,較為符合單一原則分別為
1.CheckFileName(string fileName) 檢查文件名是否正確
2.CheckCommand(string command) 檢查命令符是否正確
3.charCount(string fileName) 字符總數
4.wordCount(string fileName) 單詞總數
5.lineCount(string fileName) 行總數
6.saveData(string fileName) 儲存信息
7.operation(string command, string fileName) 根據命令符指定操作
8.getSaveFileName() 得到儲存文件名
9.setSaveFileName(string fileName) 個性化設置儲存文件名
10.test() 測試
最開始采用的其實是控制臺直接輸入參數的方法,並且寫入了較為友好的文字提示信息,但是最後發現和要求不太一樣,所以又改變為doc界面帶參啟動的運行方式,利用args[]娶到帶參數啟動的參數,並且·根據args進行命令行以及文件名判斷
部分代碼如下
bool fileIsTrue; //文件名是否正確 bool commandIsTrue; //命令是否正確 int errorCommandNum = 0; //錯誤命令數目//字段初始化 Program p = new Program(); fileIsTrue = p.CheckFileName(args[maxLength - 1]); if (fileIsTrue == false && args[0] != "-o") return; for (int i = 0; i < maxLength - 1; i++) //檢查命令集中是否有非法字符 { commandIsTrue = p.CheckCommand(args[i]); if (commandIsTrue == false) { errorCommandNum++; } } if (errorCommandNum > 0) return; for (int i = 0; i < maxLength - 1; i++) //按次執行指定命令 { p.operation(args[i], args[maxLength - 1]); }
然後計算字符數以及單詞,行數,直接引用了System.IO,然後創建了文件流,對文件進行操作,把文件讀入至byte數組,然後再通過解碼器讀至char數組,再對每一個元素進行甄別
部分代碼如下:
Stream file = new FileStream(fileName, FileMode.Open); //創建文件流 char[] allChars = new char[file.Length]; byte[] AllChars = new byte[file.Length]; int sum = 0; file.Read(AllChars, 0, AllChars.Length); //讀取文件中的字符至byte數組 Decoder decoder = Encoding.Default.GetDecoder(); //創建解碼器 decoder.GetChars(AllChars, 0, AllChars.Length, allChars, 0); //解碼器將byte數組解碼至char數組
數據的儲存是通過了在主類中定義了全局的接受變量,在執行了不同的方法之後進行賦值,然後再通過savedata方法將它們寫入至指定的目錄
最關鍵的地方在於個性化指定輸出文件的操作,如果是這樣帶參啟動,我覺得好像只能執行一次,並且馬上返回,無法再進行操作,在操作其實是重啟項目,所以最開始我設計的只能是-o xxx以後,創建一個儲存文件,但是由於儲存文件只能在類中寫死,所以其實我的方法只是創建了文件夾,並沒有解決根本性問題,所以我開始從json配置文件入手,雖然我之前在Unity開發過程中使用過Json配置方法,但是它是基於unity內置的一些API,讓json配置更符合遊戲開發,所以我並沒有接觸過原生的C#Json配置,在網上搜索了很久以後,又是下載庫,又是引用空間,但是最後發現太復雜了,在短時間我無法保證程序穩定性,所以轉而求其次,用了一種很簡單,很穩定,很方便的辦法,(但是有些low),就是我重新新建了一個TXT文件來保存文件的儲存路徑信息以及文件名,也就是savefilepath.txt這個文件,它並非已經內置與exe文件同一目錄,而是運行時根據是否有次此文件進行動態生成,而此文件中保存儲存信息文件的目錄以及文件名
部分代碼如下:
if (!File.Exists("savefilepath.txt")) //儲存文件路徑信息文件是否存在,否則創建 { FileStream sFP = new FileStream("savefilepath.txt", FileMode.Create); string savefilename = "result.txt"; //默認儲存文件 byte[] filePath = Encoding.Default.GetBytes(savefilename); sFP.Write(filePath, 0, filePath.Length); sFP.Close(); }
而對此文件的操作我重新定義了兩個方法對它進行管理,分別是
getSaveFileName()
setSaveFileName(string fileName)
它們的功能就是對savefilepath這個文件的內容進行改寫,其實變相的實現了配置文件的作用,只是只能在這種一兩個變量的程序簡便運用,大型項目不可控因素會更加龐大
到此,這個項目基本完成,其他的基礎就不多贅述了。
關於wc.exe程序處理文件字符,單詞數,行數