ITエンジニアの視界

35歳を超えてもエンジニアリング領域で生きるITエンジニアの見たもの感じたことを発信していきます。

プログラムソースコードを販売サイトに登録した。3つめ。

csvファイル内の区切り文字を含むデータを区切らせないようにしたい」というリクエストに対応することを目的としたプログラムソースコードを販売サイトにアップしました。

www.piecex.com

CSVファイルはExcelから作ったり、何かのシステムからダウンロードして入手することが多いと思います。そのCSVファイルがただの文字列とか数値だけだったらいんですけど、稀にリクエストにあったようなケースって存在しますね。Excelで作るケースとしては、Excelでセルに区切り文字のカンマを入れたデータをCSVファイルで保存するというケースです。保存されたデータはダブルクォーテーションで囲まれた形で保存されます。こうすると「区切り文字を含むデータ」が発生するんですね。このデータを上手くプログラムで扱いたいという要望だと考え、プログラムを作成しました。

JavaCSVファイルを取り扱う時には、StringTokenizerあたりを活用することがよくあると思います。StringTokenizerは文字列を区切り文字で分割してくれるとても便利なクラスです。ただ、StringTokenizerは区切り文字で分割してしまいます。上手く処理するためには、文字列はダブルクォーテーションで囲まれた範囲であり、文字列に含まれる区切り文字はデータであって区切り文字ではないという処理を追加する必要があります。この実現には標準ライブラリを使わずに、文字列処理を行っていかなければなりません。今回作成したプログラムはその処理を行って、CSVファイルからStringを返却するようにしました。

動的なリストではなくStringの固定長二次元配列にしたのは、CSVは表のようなイメージをされていることが多く、行や列が可変長より固定長の方が迷わないケースが多かったからです。CSVはcomma-separated valuesでカンマで区切られいれば良く、行の列数がそろってないといけないなんてことはないのですけれど。