【マルチ言語】テキストファイルの保存方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

テキストファイルの保存に関してはログファイルの出力や連携用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

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。