在StreamWriter.WriteLine中删除最后一个回车符的最佳方法c#

时间:2016-09-23 14:37:31

标签: c# sqldatareader

我有以下代码:

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
        }
    }
}

还有其他想法以更好的方式做到这一点吗?

4 个答案:

答案 0 :(得分:3)

可以使用简单的标记和单独的Write / WriteLine

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

答案 1 :(得分: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();
    }
}

答案 2 :(得分: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
}

答案 3 :(得分: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();