Unicode text ファイルを SQLIte デフォルトの text ファイルに変換する PowerShell スクリプト
Excel の Unicode text 出力は BOM が付くので SQLite からは読み込めない(はず)。
どうせ BOM 外しに変換するなら、ついでに encoding と separator も変更することにした。
このスクリプトは、chooseCSVFileで選択したtextファイルと同じフォルダにある全てのtextファイルをUTF8 BOM無し、かつファイル中のtabを'|'に全置換する。
unicode2UTF8nonBOM と chooseCSVFile は .psm1 としてそのうちモジュール化したい。
# toolUniTxt2SQLtxt.ps1 # Excel unicode text to SQLite default text function unicode2UTF8nonBOM{ param( $xlsU, $sqltDefault ) $sw = New-Object System.IO.StreamWriter $sqltDefault, $( New-Object System.Text.UTF8Encoding($False) ) gc $xlsU -encoding Unicode | % { $sw.WriteLine( $_.replace( "`t","|" ) ) } $sw.close() } # choose of text file # File 選択 Dialog が開き(ShowDialog)"OK" ボタンが押された場合:選択された filePath、そうでない場合:nullstring が返る $chooseCSVFile = { # Sytem.Windows.Forms 参照 :: File 選択 Dialog の御膳立て Add-Type -Assembly System.Windows.Forms # File 選択 Dialog を参照 $dlg = New-Object System.Windows.Forms.OpenFileDialog $dlg.Filter = "Text(*.csv;*.txt)|*.csv;*.txt" $dlg.InitialDirectory = "." $dlg.Title = "ファイル選択" return $( if($dlg.ShowDialog() -eq "OK"){ $dlg.FileNames }else{ "" } ) } $ScriptBase = Split-Path ( & { $myInvocation.ScriptName } ) -parent pushd $ScriptBase $choosePath = &$chooseCSVFile $chooseParent = split-path $choosePath -parent gci $chooseParent | ? { $_.name -match ".txt" } | % { $srcPath = join-path $chooseParent $_.name; $srcPath $dstPath = join-path $chooseParent $([regex]::replace($_.name,".txt$",".sqltxt")); # $dstPath unicode2UTF8nonBOM -xlsU $srcPath -sqltDefault $dstPath } popd