2012-11-15 41 views
0

所以我加載的文件中有一些加密文本,它使用自定義字符表,我如何從外部文件加載它或將字符表放在代碼中?我如何使用我自己的角色表?

謝謝。

+0

又如何解密它? – lboshuizen

+0

加密或編碼?另外考慮顯示你寫的代碼來執行轉換...否則這個問題看起來像是關閉的好候選... –

+0

@ Ibo:確切地說,我已經有了一個適合我的字符表,但我需要實現它或直接從exe/exe目錄加載它。 @Alex:我沒有代碼,我根本不知道如何去做:這就是我爲什麼要問的原因。 – Omarrrio

回答

1

首先檢查文件並對行進行計數,以便分配數組。你可以在這裏使用一個列表,但是數組有更好的性能,並且你有很多項目你必須循環很多(對於文件中的每個編碼字符一次),所以我認爲你應該使用一個數組。我們現在要分配元組和數組,

Tuple<string, string> tuples = new Tuple<string, string>[lines]; 

之後,我們將循環遍歷文件再次添加每個鍵值對作爲元組。

 try 
    { 
     using (StreamReader sr = new StreamReader("Encoding.txt")) 
     { 
      string line; 
      for (int i =0; i < lines; i++) 
      { 
       line = sr.Readline(); 
       if (!line.startsWith('#')) //ignore comments 
       { 
        string[] tokens = line.Split('='); //split for key and value 
        foreach(string token in tokens) 
          token.Trim(' '); // remove whitespaces 

        tuples[i].Item1 = tokens[0]; 
        tuples[i].Item2 = tokens[1]; 
       } 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     // Let the user know what went wrong. 
     Console.WriteLine("The file could not be read:"); 
     Console.WriteLine(e.Message); 
    } 

我給了你很多的代碼,雖然這可能需要一點修補才能工作。我沒有在編譯器中編寫第二個循環,而且我懶得查找諸如System.String.Trim之類的東西,並確保我正確使用它。我會把這些東西留給你。這有核心邏輯來做到這一點。如果你想改爲使用列表,將for循環內部的邏輯移動到while循環中,在那裏計算行數。

對正在閱讀的文件進行解碼,您必須循環訪問該數組,並比較鍵或值直到您匹配。

另一件事 - 你的元組數組將會有一些空索引(數組的長度爲lines,而文件中實際上有lines - comments + blankLines)。您需要進行一些檢查,以確保您在嘗試匹配字符時未訪問這些索引。或者,您可以增強文件讀取,使其不會計算空白行或註釋,也不會從您讀取的文件中刪除這些行。最好的解決方案是加強文件閱讀,但這也是最多的工作。

+0

這是唯一的控制檯?請問Winforms怎麼樣?謝謝。 – Omarrrio

+1

@Omarrrio不,這只是讀你的endcoding文件並創建一個鍵值對的數組。這個想法是把你的角色表放到內存中,這樣它就可以用來匹配整個應用程序中的字符。這對控制檯應用程序的作用與對winforms應用程序的作用相同。一旦你有了數組,並且你有一些字符串的自定義字符,你將使用一個嵌套循環來遍歷數組中每個字符的匹配。 – evanmcdonnal

+0

謝謝,對於遲到的回覆感到抱歉。 – Omarrrio

相關問題