巨大なファイルを分割する機会がありましたので,CSV 分割ツールを作ってみました。ちまたにいっぱいあるのですが、今回は要件が面倒で、外部ファイルに定義されているヘッダを分割しがら差し込む必要があるので、その機能が実装されています。この機能が必要な要件に今後出くわすかが不明ですが。

本ページのCSV分割ツールは古いツールです。
新しく作り直したCSV分割ツールはこちらのページからダウンロードしてください。

1. CSV ツール

バイナリとソースのリンクを掲載します。1.0.0.0 は .NET 2.0/3.0/3.5 対応のソースです。4.0.0.0 は .NET 4.0 用の Visual Studio 2010 ソリューションとビルド済みのexeです。

 

  ソース バイナリのみ
バージョン1.0 CsvDivNet_src_1.0.0.0.zip CsvDivNet_bin_1.0.0.0.zip
バージョン4.0 CsvDivNet_src_4.0.0.0.zip CsvDivNet_bin_4.0.0.0.zip

 

2. 機能

次の機能が実装されています。

  • GUI を使用したCSVファイル分割処理
  • GUIを使用しないコマンドラインからCSVファイル分割処理
  • CSVとしての行数指定分割。データに改行が含まれていても""で囲まれていればデータ項目として判定します。
  • 外部ファイルからヘッダの差し込み。分割ファイルごとに先頭に外部ヘッダファイルレコードを差し込みます。
  • 各分割ファイルの先頭にヘッダを差し込む。外部ファイルに定義されたヘッダもしくは、オリジナルファイルの1行目をヘッダとして差し込むように設定できます。ヘッダを差し込まないようにすることもできます。
  • ファイルの文字コードにShift-JIS, UTF-8, Unicode, Euc-JP をサポート

 コマンドラインモードはバッチ処理などで便利ではないかとおもい実装しました。

3. 使い方

GUIモードでの使い方を主に解説します。コマンドラインモードもGUIと同じ機能をオプションで指定できます。コマンドラインモードで指定するオプションは コマンドプロンプトから /help オプションを指定してexeを起動して確認できます。

3.1 GUIモード

さっそく GUIでの使い方を記載します。まず、exe をダブルクリックしてGUIモードで起動できます。次のような画面が表示されます。各項目の説明を以下の表に記載します。

 各項目の説明

 

項目 説明
分割ファイル 分割対象ファイルを指定します。右端のボタンをクリックしてファイル選択ダイアログを使用してファイルを選択できます。
文字コード - 入力ファイル 入力ファイルの文字コードを指定します。Shift-JIS, UTF-8,Unicode, ASCII, EUC-JP から選択できます。
データ区切文字 データ項目の区切り文字(セパレータ)を指定します。 カンマ( , ) か タブ (\t) を指定できます。
" で囲まれている データ項目がダブルクォーテーション( " ) で囲まれているかを指定します。この設定は出力ファイルのデータ項目にも引き継がれます。
ヘッダオプション

ヘッダの差し込みオプションを指定します。オプションには入力ファイルの一行目,ヘッダは存在しない,外部ファイルからの差込を選択できます。

入力ファイルの一行目をせんたくすると分割対象ファイルの1行目をヘッダとみなして各分割ファイルにヘッダを差し込みます。

ヘッダは存在しないの場合は差し込みを行いません。

外部ファイルからの差込の場合は外部ヘッダファイルで指定されたファイルのデータを各分割ファイルの先頭に差込ます。

外部ヘッダファイル ヘッダオプションが外部ファイルからの差込の場合に、ヘッダファイルを指定します。
出力先ディレクトリ 分割ファイルを出力するフォルダを指定します。右端のボタンをクリックするとフォルダ選択ダイアログが表示され、ダイアログからフォルダを選択できます。
出力ファイルベース名 出力ファイルのベース名を指定します。ベース名に各ファイルの枝番とファイル拡張子を結合した文字列がファイル名になります。
ファイル拡張子 分割ファイルの拡張子を指定します。
文字コード - 出力ファイル 出力ファイルの文字コードを指定します。Shift-JIS, UTF-8,Unicode, ASCII, EUC-JP から選択できます。
分割行数単位 分割するレコード単位を指定します。CSVとしてのレコード数です。データに改行が含まれていても1行とみなされます。
最大分割ファイル数 分割するファイルの最大数を指定します。この最大数を超過しても実際には分割処理は行われます。この数字の桁数は枝番のつけ方に影響を与えます。2桁の場合01,02 となり、3桁の場合 001,002 のように分割ファイルの枝番が付与されます。
分割ログ 処理のログが出力されます。
分割 ボタン 設定に従って分割処理を実施します。分割処理が成功するとexeと同じパスにconfig.xmlというファイルが作成または更新されます。これは最新のGUIの設定を記録したファイルであり、コマンドラインモードで使用することができます。詳細はコマンドラインモードの説明を参照。
閉じる ボタン 画面を閉じます。

 

3.2 コマンドラインモード

GUIと同じ操作をコマンドラインから実現できます。簡単な使い方を説明します。

ヘルプを表示する場合は次のようにコマンドを入力します。

CsvDivNet.exe /console /help

各項目について詳細なオプションをしていして分割を行えますが骨の折れる作業です。そこで、GUIで分割が成功した時にexeのフォルダに作成されるconfig.xml をベースとして同的に変化のある項目のみをコマンドラインオプションで指定する方法を推奨します。

GUI画面で成功した設定と同じ内容で 分割する場合は次のコマンドを使用します。

CsvDivNet.exe /console /config:.\config.xml

入力ファイルのみをconfig.xml の内容から上書きして分割処理を行う場合は次のようにコマンドを使用します。

CsvDivNet.exe /console /config:.\config.xml /inputfile:C:\work\hugedata.csv

コマンドラインオプションは細かく各オプションを設定するのではなく、GUIで作成したconfig ファイルをベースとして変更箇所のみをオプションで指定して分割を行う運用を想定しています。

4. リリース履歴

  • 2010/05/01 バージョン1.0公開
  • 2012/07/03 .NET 4.0 用のバージョン 4.0 公開
    CSVフォーマットが不正の場合に何もせずに処理が終了する不具合を修正しています。
    .NET 2.0 用のは直してないで注意してください。もちろんフォーマットに間違いがなければ正しく動きます。