今回はCSVファイルを分割するツールを開発してみましょう。
Google検索すると、フリーのツールを紹介する記事がヒットしますが、自作もそれほど難しくないので、数回に分けて、作り方を説明していきます。
今回は、その第1回目ということで、プログラムの概要と設計をしてみたいと思います。
概要を把握しよう
今回作るCSV分割プログラムの画面レイアウトは次の様になります。

レイアウトを見て頂くと分かると思いますが、分割したいファイルとヘッダ行数、分割行数(分割した1つのファイルに収める行数)を指定すれば、出力先フォルダに分割されたCSVファイルが出力されるというものです。
画面は至ってシンプルですね。
仕様を整理しよう
CSV分割ツールの仕様は以下の通りです。
- 分割したいCSVファイル、及び出力先フォルダが指定(入力)できる
- CSVファイルおよび出力先フォルダはダイアログでも選択できる
- ヘッダの行数が指定できる
- 分割する行数が指定できる
- 文字コードはShift-JISのみ対応とする
- 出力ファイルは元のCSVファイル名に連番を付加する
ここでダイアログというのが出てきましたが、これはWindowsでファイルを選択したり、フォルダを選択する時に表示される、おなじみのダイアログです。
<ファイル選択ダイアログの例>

<フォルダ選択ダイアログの例>

これらのダイアログは数行のコードを書くだけで、プログラムから簡単に利用できます。
フローで処理イメージをつかもう
フローチャートで処理手順を理解しておきましょう。
今回も分かりやすさを優先に処理手順(ロジック)をまとめました。
ザックリ説明すると、CSVファイルを一旦メモリに読み込んでから、ヘッダのみを別変数に退避します。
次に、メモリに読み込んだCSVのデータ部を、指定行数だけ取り出して、ファイルに出力します。
これを、取り出すデータが無くなるまで繰り返すという方法です。

この方法はフローチャートの箱1つ1つを、1つのかたまり(独立したブロック)としてプログラミングできるので、考えやすいというメリットがあります。
また、今回は扱いませんが、一旦メモリに読み込むことで様々なデータ加工が行いやすくなりますので、分割以外にも応用が効きます。
デメリットとしては、分割対象のCSVファイルを丸ごとメモリに読み込む必要があるため、ファイルサイズが巨大だとメモリー不足となり、分割することが出来ません。
それでも、パソコンに8GB程度のメモリが搭載されていれば、3.4GB(列数=200個、行数=100万行)程度のCSVファイルであれば余裕で分割可能です。
容量無制限のCSVファイルへの対応については、バージョンアップの際に解説したいと思います。
使うコントロールを決めよう
今回は画面項目がシンプルなので、Label、Button、TextBoxのコントロールだけを使います。

ファイル選択とフォルダ選択のダイアログは、コントロールとして張り付ける訳では無いので、ここには登場しません。
画面レイアウト作成の際、Label以外のコントロールには名前を付ける必要がありますが、それは次回詳しく説明します。
まとめ
ということで、今回は概要と簡単な設計を行ってみました。
次回はVisual Studio 2019 のプロジェクトを作成し、画面レイアウトと、空のイベントハンドラの作成までを行います。