2014-01-30 52 views
0

臨時數組我問這個之前,但大多數人並不明白我的問題。寫作從文本文件

我有兩個文本文件。 Gamenam.txt這是我正在閱讀的文本文件,以及gam enam_2.txt

gamenam.txt我有一個字符串是這樣的:

01456 
02456 
05215 
05111 
01421 
03117 
05771 
01542 
04331 
05231 

我已經寫了代碼to count number of times substring "05" appears in text file before substring "01"

我被寫入到gamenam_1.txt輸出是:

01456 
02456 
05215 
05111 
2 
01421 
03117 
05771 
1 
01542 
04331 
05231 
1 

這是我寫的,實現

string line; 
int counter = 0; 
Boolean isFirstLine = true; 
try 
{ 
    StreamReader sr = new StreamReader("C:\\Files\\gamenam.txt"); 
    StreamWriter sw = new StreamWriter("C:\\Files\\gamenam_1.txt"); 

    while ((line = sr.ReadLine()) != null) 
    { 
     if (line.Substring(0, 2) == "01") 
     { 
      if (!isFirstLine) 
      { 
       sw.WriteLine(counter.ToString()); 
       counter = 0; 
      } 
     } 

     if (line.Substring(0, 2) == "05") 
     { 
      counter++; 
     } 

     sw.WriteLine(line); 

     if (sr.Peek() < 0) 
     { 
      sw.Write(counter.ToString()); 
     } 

     isFirstLine = false; 
    } 

    sr.Close(); 
    sw.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine("Exception: " + e.Message); 
} 
finally 
{ 
    Console.WriteLine("Exception finally block."); 
} 

該代碼是可以正常使用的代碼。

現在我必須編寫代碼在寫入行之前打印子串「05」的計數。

我的輸出應該是這個樣子:

2 
01456 
02456 
05215 
05111 
1 
01421 
03117 
05771 
1 
01542 
04331 
05231 

顯然我應該先寫行臨時字符串數組,計數,然後編寫計數,然後從後我臨時數組寫入線。

我新的發展,使我堅持試圖找出如何我做到這一點。

任何幫助將高度讚賞。

+0

打印? –

+0

附註 - 如果你有回答你剛纔的問題,然後確保你接受的答案@SergeyBerezovskiy我非常感激這是最有用的,你 –

+0

。對於每個人的投入,因爲我已經指出 – Brian02

回答

2

嘗試在控制檯窗口此

string line; 
int counter = 0; 
Boolean isFirstLine = true; 
try 
{ 
    StreamReader sr = new StreamReader("C:\\Files\\gamenam.txt"); 
    StreamWriter sw = new StreamWriter("C:\\Files\\gamenam_1.txt"); 

    var lines = new List<string>(); //Here goes the temp lines 
    while ((line = sr.ReadLine()) != null) 
    { 
     if (line.Substring(0, 2) == "01") 
     { 
      if (!isFirstLine) 
      { 
       sw.WriteLine(counter.ToString()); //write the number before the lines 
       foreach(var l in lines) 
        sw.WriteLine(l); //actually write the lines 
       counter = 0; 
       lines.Clear(); //clear the list for next round 
      } 
     } 

     if (line.Substring(0, 2) == "05") 
     { 
      counter++; 
     } 

     lines.add(line); //instead of writing, just adds the line to the temp list 

     if (sr.Peek() < 0) 
     { 
      sw.WriteLine(counter.ToString()); //writes everything left 
      foreach(var l in lines) 
       sw.WriteLine(l); 
     } 

     isFirstLine = false; 
    } 

    sr.Close(); 
    sw.Close(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine("Exception: " + e.Message); 
} 
finally 
{ 
    Console.WriteLine("Exception finally block."); 
} 
+0

我是一種新的與文本文件時,我得到你在哪裏指定了線錯誤foreach(var 1行) – Brian02

+0

我試着運行你的代碼,但我的輸出結果顯示所有的行一行一行,並顯示,我認爲是子字符串「05」的所有行的總數。我的代碼想要做的是逐行讀取並將行存儲在某處,可能是一個列表,甚至是一個數組,暫時打印一個子字符串「05」發生在循環變爲子串「01」之前的次數,然後寫入然後記下臨時對象中的所有行。 – Brian02

+0

它是var「l」的字母,而不是「1」的數字 – ivowiblo