- PR -

StringBuilder,Appendメソッドでのフォーマット設定

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-20 11:31
いつもお世話になります。
表題の件でご存知の方がいらっしゃいましたらご教授ください。
WinXp
VB.NET
SQLServer2000

データテーブルの中身をCSVで出力しようとしています。
過去ログを参照させて頂き
====================================================
For intLoop As Integer = 0 To dtSource.Columns.Count - 1
sb.Append("{")
sb.Append(intLoop).ToString()
sb.Append("}")
If Not intLoop = dtSource.Columns.Count - 1 Then
sb.Append(",")
End If
Next

For Each row As DataRow In dtSource.Rows
writer.Write(sb.ToString(), row.ItemArray())
writer.Write(vbCrLf)
Next
=========================================================
とし,普通に出力することは出来ました。
問題は,sb.Append(intLoop).ToString()のところでフォーマットを指定
して出力する方法です(日付型など)
現在出力すると日付の部分が「2004/11/18 0:00:00」と出力されます。
これを「2004/11/18」と出力するにはどのように記述すれば良いでしょうか?
ちなみにテーブルの型を取得してselect-caseで判断して日付型の時
にこの処理を行おうとしています。
よって
===============================================================
Dim dtCol As DataColumn = dtSource.Columns(intLoop)
Select Case dtCol.DataType.ToString
Case Type.GetType("System.DateTime").ToString
sb.Append("{")
sb.Append(intLoop).ToString()★この部分でフォーマットを指定??
sb.Append(hoge)
sb.Append("}")
Case bit型の時などもフォーマットを揃えたい
End Select
=====================================================================
を最初の部分に追加していたのですが,単純にstring.formatなどでは変換できない
ようなので・・・。

ご存知の方がいらっしゃいましたらご教授ください。
宜しくお願い致します。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-11-20 12:27
VBは詳しくないので正確なコードはかけませんが「★この部分でフォーマットを指定?」の所を
sb.AppendFormat("{{{0}:{1}}}", intLoop, "yyyy/MM/dd")
にすればいけると思います。

後sb.Append(intLoop).ToString() のToStringはいらないんじゃ?
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-20 13:15
Kazuki様ご返答ありがとうございます。
.toStringはNullの時に使用しようかと思って付けていました。

sb.AppendFormat("{{{0}:{1}}}", intLoop, "yyyy/MM/dd")
ですが,
出力結果が
{11:yyyy/MM/dd},{12:yyyy/MM/dd}・・・・・・
となります。

むむ・・・。
詰まりました・・・。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-20 13:32
KAZUKI様
すいません。
========================================
If dtCol.DataType.ToString = "System.DateTime" Then
★sb.Append("{")
sb.AppendFormat("{{{0}:{1}}}", intLoop, "yyyy/MM/dd")
★sb.Append("}")
Else
sb.Append("{")
sb.Append(intLoop).ToString()
sb.Append("}")
End If
===========================================================
★の部分を記述していた為,うまくいっていなかったみたいです。
後はLoopするときにsb.Append("{")を気をつけて出力すればいける
と思います。

本当にありがとう御座いました。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-11-21 15:28
引用:

sb.Append("{")
sb.Append(intLoop).ToString()
sb.Append("}")


やっぱりこれのToStringって無意味なのでは?
sb.Appendの戻り値はsbへの参照なので上のコードは
sb.Append("{")
sb.Append(intLoop)
sb.ToString()
sb.Append("}")
と同じコードになります
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-11-22 08:17
Kazuki様
ご回答ありがとうございます。
イマイチsbの使い方がわかっていなくて(笑)
ただ今勉強中です。
toString()はそういうことになるんですね・・・。

色々と試してみます。
ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)