テキストファイルの保存に関してはログファイルの出力や連携用CSVファイルの出力といった、業務系では比較的利用頻度の多い処理となります。
その割に各言語によって難易度に開きがあり、久しぶりに触る言語ではなかなか出てこない事もあります。
ここではC#、VB.net、バッチ、PowerShell、SQLServerでのコードを紹介します。
C#の場合
.Net系のC#とVB.netでは比較的簡単に実現する事が可能です。
usingステートメントを使うことで自動でリソースが解放されますので、積極的に活用しましょう。
//既存のテキストファイルがあれば追記する
using (StreamWriter sw = new StreamWriter(@"C:\temp\log.txt", true)){
//1行出力
sw.WriteLine(DateTime.Now.ToString("文字の出力"));
}
VB.netの場合
'既存のテキストファイルがあれば追記する
Using sw As StreamWriter = New StreamWriter("C:\temp\log.txt", True)
'1行出力
sw.WriteLine("文字の出力")
End Using
バッチの場合
バッチではコマンド実行結果をテキストファイルに保存する事が多いですが、echoコマンドを利用する事で通常の文字列の保存する事が可能です。
rem コマンド実行結果のテストキファイル保存
rem コマンド > 保存先パス
dir >c:\temp\log.txt
rem 文字列をテキストファイル保存する
echo 文字の出力 >c:\temp\log.txt
PowerShellの場合
#出力パスの設定
$path = "C:\temp\log.txt"
#FileStreamのOpen
$fs = New-Object System.IO.StreamWriter($path, $false, [System.Text.Encoding]::GetEncoding("sjis"))
#1行出力
$fs.WriteLine("文字の出力")
#FileStreamのClose
$fs.Close()
ストアドプロシージャの場合
SQLServerではストアドプロシージャでログ出力として使いたくなる事があります。
指定したパスはローカルではなくサーバーサイドのものになるため注意が必要です。
テキストファイル出力機能がそのままある訳ではないのでcmdを実行する形となり、
テーブルの内容を出力したい場合にはbcpコマンドを使います。
--文字列をテキストファイル保存する
EXEC master..xp_cmdshell 'echo 文字の出力 >c:\temp\log.txt'
--テーブルの内容を出力する(ヘッダ情報は出力されない)
declare @cmd varchar(1000)
declare @FilePath varchar(1000) = 'c:\temp\log.csv'
set @cmd = 'bcp "select * from tablename" queryout "' + @FilePath + -c -S localhost -T -t,'
EXECUTE master.dbo.xp_cmdshell @cmd
--テーブルの内容を出力する(ヘッダ情報出力の場合は工夫が必要)
--ヘッダとテーブル内容を別々のファイルに出力してcopyコマンドで連結する
declare @cmd varchar(1000)
declare @FilePath varchar(1000) = 'c:\temp\'
Select '列名1' as col1
,'列名2' as col2
,'列名3' as col3
into ##head
set @cmd = 'bcp "select * from ##head" queryout "' + @FilePath + 'head.csv' -c -S localhost -T -t,'
EXECUTE master.dbo.xp_cmdshell @cmd
set @cmd = 'bcp "select * from tablename" queryout "' + @FilePath + 'body.csv' -c -S localhost -T -t,'
EXECUTE master.dbo.xp_cmdshell @cmd
set @cmd = 'copy "' + @FilePath + 'head.csv" + "' + @FilePath + 'body.csv" "' + @FilePath + 'log.csv' + '"'
EXECUTE master.dbo.xp_cmdshell @cmd