删除 StreamWriter.WriteLine c# 中最后一个马车 return 的最佳方法
Best way to remove the very last carriage return in 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
每次都加一个回车return,但我需要在到达最后一行时避免它。
我发现下面的代码知道 SqlDataReader 何时在最后一行,那时我可以将 WriteLine
更改为 Write
,这不会添加回车 return :
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
}
}
}
还有其他更好的方法吗?
我想您是在谈论评论 //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();
}
}
您可以在为除第一行以外的所有行写新行之前写一个回车符return。您的代码应如下所示:
if(reader.Read())
{
// write first line without carriage return in the beginning
}
while(reader.Read())
{
//write a carriage return
// ... and then write your line
}
可以通过简单的标志和单独的 Write
/ WriteLine
:
来实现
bool first = true;
while (Rdr.Read())
{
if (!first) writer.WriteLine();
writer.Write(Rdr["Item1"].ToString() + Rdr["Item2"].ToString());
first = false;
}
在这种情况下我喜欢这样做:
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();
我有以下代码:
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
每次都加一个回车return,但我需要在到达最后一行时避免它。
我发现下面的代码知道 SqlDataReader 何时在最后一行,那时我可以将 WriteLine
更改为 Write
,这不会添加回车 return :
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
}
}
}
还有其他更好的方法吗?
我想您是在谈论评论 //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();
}
}
您可以在为除第一行以外的所有行写新行之前写一个回车符return。您的代码应如下所示:
if(reader.Read())
{
// write first line without carriage return in the beginning
}
while(reader.Read())
{
//write a carriage return
// ... and then write your line
}
可以通过简单的标志和单独的 Write
/ WriteLine
:
bool first = true;
while (Rdr.Read())
{
if (!first) writer.WriteLine();
writer.Write(Rdr["Item1"].ToString() + Rdr["Item2"].ToString());
first = false;
}
在这种情况下我喜欢这样做:
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();