1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【BAT】巨大ファイルの高速文字コード変換

Last updated at Posted at 2018-11-09

はじめに

お仕事のサーバーリプレース作業でデータベースを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ツール

nkf.bat
@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

emcnv.bat
@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 にセットします。

list.txt
FUGA
HOGE
TESTDATA
SJIS2UTF8N.bat
@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のコマンドラインのメリットを見つけれたということですね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?