wc.exe程式

來源:互聯網
上載者:User

標籤:任務   配置   string   檔案夾   命令列   odi   ++   搜尋   軟體   

摘要

本項目我只實現了準系統,也就是檔案的字元總數,單詞總數,以及行數的計算,以及輸出至哪個檔案

並且直接使用C#語言進行編寫

整個項目我集中在一個主類和一個主方法

 

解題思路:

最開始採用的其實是控制台直接輸入參數的方法,並且寫入了較為友好的文字提示資訊,但是最後發現和要求不太一樣,所以又改變為doc介面帶參啟動的運行方式,利用args[]娶到帶參數啟動的參數,並且·根據args進行命令列以及檔案名稱判斷

並且對於所有的功能是西安了單一原則的思想,然後再多追加了幾個方法對主要功能,以及字串檔案進行安全檢查,防止程式崩潰,再加上一個txt設定檔管理制定輸出檔案夾

具體執行:

十個方法,分別完成相應的任務,較為符合單一原則分別為

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()                 測試

然後計算字元數以及單詞,行數,直接引用了System.IO,然後建立了檔案流,對檔案進行操作,把檔案讀入至byte數組,然後再通過解碼器讀至char數組,再對每一個元素進行甄別

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]);            }

 

資料的儲存是通過了在主類中定義了全域的接受變數,在執行了不同的方法之後進行賦值,然後再通過savedata方法將它們寫入至指定的目錄

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數組

 

最關鍵的地方在於個人化指定輸出檔案的操作,如果是這樣帶參啟動,我覺得好像只能執行一次,並且馬上返回,無法再進行操作,在操作其實是重啟項目,所以最開始我設計的只能是-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這個檔案的內容進行改寫,其實變相的實現了設定檔的作用,只是只能在這種一兩個變數的程式簡便運用,大型項目不可控因素會更加龐大

 

測試:

exe同目錄結構如下:

在dos介面執行以下命令後,exe同名檔案發生變化

產生savapathfile儲存輸出檔案夾的路徑資訊,result.txt為預設輸出路徑

result.txt和savafilepath問價內容如下

 

執行制定檔案夾輸出命令後,exe同名檔案夾目錄如下

產生了新的outfile檔案夾

此時再進行命令執行,以及查看outfile檔案內容

實現了TXT作為設定檔的功能,可以自訂輸出路徑,並正確儲存

 

感想:

此次實驗項目對於主要功能的實現其實很簡單,但是這樣的項目可以讓我們有效管理我們學過的知識並加以靈活運用,就比如說帶參啟動,這在以前的編程中我從沒遇到,這樣的項目讓我知道了怎麼去帶參啟動,以及args[]數組的索引從何開始,還有就是設定檔我覺得實我收穫最大的,以前寫設定檔都是直接利用開發軟體內建的API進行設定檔的編寫,但是這一次沒有接觸C#原生的設定檔,所以可以很巧妙的運行txt來作為設定檔

 

wc.exe程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.