前回はCSVファイルの分割ツールを開発しました。
今回はその逆で、CSVファイルを結合するツールを開発してみましょう。
単純にファイルを結合するだけであれば、Windows標準機能(コマンドプロンプトでコマンドを実行)することでも可能なのですが、CSVファイルは1行目がヘッダになっていることが多く、単純に結合してしまうと随所にヘッダ行が挿入されてしまいます。
CSV分割ツールと同様に自作もそれほど難しくないので、数回に分けて作り方を説明していきます。
今回は、その第1回目ということで、プログラムの概要と設計をしてみたいと思います。
概要を把握しよう
今回作るCSV結合プログラムの画面レイアウトは次の様になります。

結合したいCSVファイルを納めたフォルダと出力ファイル名、ヘッダ行数の他、文字コードの指定が出来る様になっています。
前回のCSV分割ツールとよく似た感じですね。
仕様を整理しよう
CSV結合ツールの仕様は以下の通りです。
- 結合したいCSVファイルが格納されたフォルダ、及び出力ファイル名が指定(入力)できる
- フォルダ及び出力フォルダはダイアログでも選択できる
- ヘッダの行数が指定できる
- CSVファイルの読み込み、出力時の文字コードが指定できる。
- 文字コードは shift-jis か utf-8をドロップダウンで指定できる。
前回のCSV分割ツールと同じく、今回もダイアログを使います。
<ファイル選択ダイアログの例>

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

フローで処理イメージをつかもう
それでは、フローチャートで処理手順を理解しておきましょう。
今回も分かりやすさを優先に処理手順(ロジック)をまとめています。
ザックリ説明すると、フォルダ内にあるファイルを「1つづつ読み込んでは出力ファイルに書き込む」という処理を繰り返すだけです。
注意点としては、1つ目のファイルについてはヘッダを含めた書き込みが必要で、2つ目以降はヘッダを除外するという制御が必要になります。
その判断方法としてフラグを使うという方法を採用しましたが、それについては実際のソースコードで詳しく説明したいと思います。
ここでは、ザックリと流れだけを理解しておいて下さい。

CSV分割ツールと同様に、今回の方法もCSVファイルを一旦メモリに読み込む必要があるため、巨大なサイズのファイルを結合しようとするとメモリ不足でエラーになります。
しかし、結合対象のファイル数や出力ファイルのファイルサイズには特に制限がありません。
使うコントロールを決めよう
今回は、Label、Button、TextBox、ComboBoxの4種類のコントロールを使います。

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