2011-11-09 60 views
0

我想讀取一個文本文件,將其分解成一個字符串數組,然後編譯新的字符串出來的單詞,但我不希望它超過120字符的長度。添加到字符串,直到命中長度(noobie C#人)

我正在做的事情是讓它編寫PML爲我使用的一些軟件創建一個宏,並且文本不能超過120個字符。爲了更進一步,我需要包裝120個字符或更少(到最近的單詞),字符串與「BTEXT |字符串在這裏|」這是命令。

下面是代碼:

static void Main(string[] args) 
{ 
    int BIGSTRINGLEN = 120; 

    string readit = File.ReadAllText("C:\\stringtest.txt"); 
    string finish = readit.Replace("\r\n", " ").Replace("\t", ""); 
    string[] seeit = finish.Split(' '); 
    StringBuilder builder = new StringBuilder(BIGSTRINGLEN); 
    foreach(string word in seeit) 
    { 
      while (builder.Length + " " + word.Length <= BIGSTRINGLEN) 
      { 
       builder.Append(word) 
      } 

    } 
} 
+0

的同時行('而(builder.Length + 「」 + word.Length <= BIGSTRINGLEN)')不會編譯。 – phoog

+0

爲了使while行工作,它可能應該是這樣的:while(builder.Length + 1 + word.Length <= BIGSTRINGLEN)。 調試代碼時,您可能會弄清楚爲什麼它只包含文件中第一個單詞的重複項。 – Casperah

回答

2

嘗試使用if代替,而你會不斷追加同一個詞如果不!

1

而不是將整個文件讀入內存,您可以一次讀取一行。這將減少你的內存需求,也可以防止你必須更換換行符。

StringBuilder builder = new StringBuilder(BIGSTRINGLEN); 
foreach (var line in File.ReadLines(filename)) 
{ 
    // clean up the line. 
    // Do you really want to replace tabs with nothing? 
    // if you want to treat tabs like spaces, change the call to Split 
    // and include '\t' in the character array. 
    string finish = line.Replace("\t", string.Empty); 
    string[] seeit = finish.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); 
    foreach (string word in seeit) 
    { 
     if ((builder.Length + word.Length + 1 <= BIGSTRINGLEN) 
     { 
      if (builder.Length != 0) 
       builder.Append(' '); 
      builder.Append(word); 
     } 
     else 
     { 
      // output line 
      Console.WriteLine(builder.ToString()); 
      // and reset the builder 
      builder.Length = 0; 
     } 
    } 
} 
// and write the last line 
if (builder.Length > 0) 
    Console.WriteLine(builder.ToString()); 

如果一個單詞長於BIGSTRINGLEN,那麼該代碼將失敗。長詞將最終輸出一個空行。我想你可以想出如何處理這種情況,如果它成爲一個問題。

+0

真棒,這是一個偉大的想法,謝謝! –

1

馬修月亮是正確的 - 你的while循環是不會按照目前的工作。

但是不談,你在這一行

while (builder.Length + " " + word.Length <= BIGSTRINGLEN) 

builder.Lengthword.Length是整數的一些問題 - 字符的每個單詞的數量。 " "不是一個整數,它是一個字符串。您無法正確添加10 + " " + 5。你可能

while (builder.Length + (" ").Length + word.Length <= BIGSTRINGLEN) 

// or 
while (builder.Length + 1 + word.Length <= BIGSTRINGLEN)