0

C#では、複数の行を持つstringbuilderをファイルにエクスポートして、行を維持するにはどうすればよいですか。ここに私のコードがあります:

StringBuilder builder = new StringBuilder();
using (SqlCommand command = new SqlCommand(consulta, SqlConn))
{
  using (SqlDataReader reader = command.ExecuteReader())
  {
    while (reader != null && reader.Read())
    {
      builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]));
    }
  }
}

ここにファイルを保存しますが、行を尊重していません。

File.WriteAllText(saveFileDialog1.FileName, builder.ToString());
4

4 に答える 4

3

AppendLineメソッドを使用して改行を挿入する必要があります。

builder.AppendFormat(...);
builder.AppendLine();
builder.AppendFormat(...);

改行が必要な場所。

于 2012-11-19T15:14:40.853 に答える
1

これを行うのがより効率的で簡単であれば、これによりStringBuilder、中間のメモリを不必要に使用したり、メモリを割り当てるオーバーヘッドを回避できStringます。

AppendLineまた、行を新しい行で区切るための追加機能も追加しました。

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat(
"{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}", 
                    Convert.ToString(reader[0]),
                    reader.GetDateTime(1).ToString("yyyy-MM-dd"),
                    reader.GetDateTime(2).ToString("yyyy-MM-dd"),
                    Convert.ToString(reader[3]),
                    Convert.ToString(reader[4]), 
                    "06",
                    Convert.ToString(reader[5]),
                    Convert.ToString(reader[6]),
                    Convert.ToString(reader[7]));
                writer.AppendLine();
           }
       }
    }
}

また、このようにコードの可読性を向上させることもお勧めしますが、これは主観的なものと見なすことができますが、

using (var writer = new StreamWriter(saveFileDialog1.FileName))
{
    using (SqlCommand command = new SqlCommand(consulta, SqlConn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader != null && reader.Read())
            {
                writer.AppendFormat("{0, -7}", reader[0]);
                writer.AppendFormat("{0:yyyy-MM-dd, -12}", reader.GetDateTime(1));
                writer.AppendFormat("{0:yyyy-MM-dd, -11}", reader.GetDateTime(2));
                writer.AppendFormat("{0, -19}", reader.[3]);
                writer.AppendFormat("{0, -12}06", reader.[4]);
                writer.AppendFormat("{0, -11}, reader.[5]);
                writer.AppendFormat("{0, -6}, reader.[6]);
                writer.AppendFormat("{0, -10}, reader.[7]);
                writer.AppendLine();
           }
       }
    }
}
于 2012-11-19T15:26:06.387 に答える
1

Environment.NewLine を使用して、ビルダーの各行の末尾に新しい行を追加できます。

builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);
于 2012-11-19T15:17:48.700 に答える
0

また、文字列ビルダーのどこに新しい行がありますか? これを試して:

while (reader != null && reader.Read())
{
     builder.AppendFormat("{0,-5}  {1,-10}  {2,-10} {3,-18} {4,-10}  {5,-2}  {6,-10} {7,-5} {8,-10}{9}", Convert.ToString(reader[0]), reader.GetDateTime(1).ToString("yyyy-MM-dd"), reader.GetDateTime(2).ToString("yyyy-MM-dd"), Convert.ToString(reader[3]), Convert.ToString(reader[4]), "06", Convert.ToString(reader[5]), Convert.ToString(reader[6]), Convert.ToString(reader[7]), Environment.NewLine);
}
于 2012-11-19T15:18:07.353 に答える