2016-09-23 27 views
0

我有婁代碼:最好的方法去除StreamWriter.WriteLine的最後回車C#

SqlDataReader Rdr = Cmd.ExecuteReader(); 
if (Rdr.HasRows) 
{ 
    using (StreamWriter writer = new StreamWriter("c:\\Test.txt")) 
    { 
     while (Rdr.Read()) 
     { 
      writer.WriteLine(Rdr["Item1"].ToString() + Rdr["Item2"].ToString()); 
     } 
    }       
} 
Rdr.Close(); 

WriteLine增加每一次回車,但我需要避免到達最後一行時。

我發現婁代碼,知道什麼時候該SqlDataReader的是在最後一行,在此,這一點我可以WriteLine通過Write改變不加回車:

if (reader.HasRows) 
{ 
    var loop = true; 
    while (loop) 
    { 
     //1. Here retrive values you need e.g. var myvar = reader.GetBoolean(0); 
     loop = reader.Read(); 
     if (!loop) 
     { 
      //You are on the last record. Use values read in 1. 
      //Do some exceptions 
     } 
     else { 
      //You are not on the last record. 
      //Process values read in 1., e.g. myvar 
     } 
    } 
} 

任何其他的想法做這是一個更好的方式?

回答

2

它可以用簡單的標誌和獨立Write/WriteLine來實現:

bool first = true; 
while (Rdr.Read()) 
{ 
    if (!first) writer.WriteLine(); 
    writer.Write(Rdr["Item1"].ToString() + Rdr["Item2"].ToString()); 
    first = false; 
} 
0

我想你說的是評論//1. Here retrive values you need e.g. var myvar = reader.GetBoolean(0);,並且你不想爲所有獨立的列創建中間變量。

這是非常可行的,因爲沒有太多的用處來做到這一點。您可以簡單地使用HasRows屬性來查看之後是否有東西可以讀取,您剛剛讀取上一行,如果是,則寫一個換行符。

while (reader.Read()) 
{ 
    // Build the line you want to write 
    string lineToWrite = reader["Item1"].ToString() + reader["Item2"].ToString(); 

    // Write the line without carriage return 
    writer.Write(lineToWrite); 

    if (reader.HasRows) 
    { 
     writer.WriteLine(); 
    } 
} 
0

您可以在寫入除第一行之外的所有行的新行之前寫回車符。你的代碼應該是這個樣子:

if(reader.Read()) 
{ 
    // write first line without carriage return in the beginning 
} 
while(reader.Read()) 
{ 
    //write a carriage return 
    // ... and then write your line 
} 
+0

該OP不_只希望最後一行的回車。 – CodeCaster

0

下面是我喜歡的情況下做這樣的:

SqlDataReader Rdr = Cmd.ExecuteReader(); 
if (Rdr.HasRows) 
{ 
    using (StreamWriter writer = new StreamWriter("c:\\Test.txt")) 
    { 
     string eol = ""; 
     while (Rdr.Read()) 
     { 
      writer.Write("{0}{1}{2}", eol, Rdr["Item1"], Rdr["Item2"]); 
      eol = Environment.NewLine; 
     } 
    }       
} 
Rdr.Close();