はじめに
お仕事のサーバーリプレース作業でデータベースをOracle 11gからPostgreSQL 9.6に移行作業をしています。
Oracle 11gのダンプファイルから、株式会社レッドペンギンのRP Dump Browser for Oracle(旧 EX Dump Editor) のテキスト出力機能にてCSV出力しました。しかし、文字コードのエンコーディング指定は有料版のみのため、Shift-JISで出力することになります。ちなみにライセンス購入依頼中の段階です。
今回、PostgreSQLにインポートするのに出力したCSVファイルをUTF-8(BOMなし)に文字コード変換する必要がありますが、一部のデータは1GByte~4GByte近くあったりします。
サクラエディタでも開くのは厳しいですが、EmEditorは巨大なファイルを開けるエディタとして有名です。
【2021/12/25追記】
Oracle環境なしで、簡単にDumpファイルの中身を確認、出力するツール「RP Dump Browser for Oracle」の開発会社である株式会社レッドペンギンが倒産してました。
https://www.tokyo-keizai.com/archives/60951
EmEditorのコマンドライン
EmEditorには、コマンドライン機能があり、その中にはエンコードの変換が用意されています。
コマンド ラインでエンコードを変換するには
TESTDATA.txt(Shift-JIS) を TESTDATA.csv (UTF-8 BOMなし) に変換するバッチです。
@echo off
cd /d %~dp0
set EM_COMMAND="C:\Program Files\EmEditor\EmEditor.exe"
%EM_COMMAND% TESTDATA.txt /nr /sp /cp 932 /c "Config" /cps 65001 /ss- /sa TESTDATA.csv
文字コード変換速度
文字コード変換には、定番のnkfツールがあります。
nkfツールで文字コードを変換する(Windows編)
3.91GByteのテキストファイルの文字コード変換(Shift-JIS → UTF-8 BOMなし)を、nkfツールとEmEditorで比較してみました。
nkfツール
@echo off
cd /d %~dp0
echo %time%
nkf32 -w TESTDATA.txt > TESTDATA.csv
echo %time%
pause
10:43:11.36
10:53:17.17
約10分かかっています。
EmEditor
@echo off
cd /d %~dp0
set EM_COMMAND="C:\Program Files\EmEditor\EmEditor.exe"
echo %time%
%EM_COMMAND% TESTDATA.txt /nr /sp /cp 932 /c "Config" /cps 65001 /ss- /sa TESTDATA.csv
echo %time%
pause
11:21:31.02
11:22:40.86
約1分10秒で終わりました。
結果
nkfツールは約10分、EmEditorは約1分10秒という結果となりました。
文字コード変換の速度としては約10倍の差がでました。
一括変換
変換するテーブル一覧を list.txt
にセットします。
FUGA
HOGE
TESTDATA
@echo off
cd /d %~dp0
set EM_COMMAND="D:\Program Files\EmEditor\EmEditor.exe"
for /f %%a in (list.txt) do (
if exist backup\%%a.txt (
%EM_COMMAND% backup\%%a.txt /nr /sp /cp 932 /c "Config" /cps 65001 /ss- /sa %%a.csv
) else (
echo %%a.txt が見つかりません
)
)
pause
最後に
EmEditorのコマンドラインというマイナーな機能を紹介してみました。
実は高速はどうかは後付けです。EmEditorのコマンドラインがあったという記事では寂しいので、試しにnkfツールで文字コード変換してみたら思ってたより遅かったので、EmEditorのコマンドラインのメリットを見つけれたということですね。