第5回 テキストファイル操作クラスの追加

公開日:2018-05-01

1. 内容

1. TextFileクラスの追加

テキストファイルを表すTextFileクラスを追加しました。 ファイルのパス、読み込み専用フラグ、文字コード、改行コードの保持と、テキストファイルの読み込み・書き込みメソッドを追加し、テキストファイルの操作を行えるようにしました。 今までは RichTextBox の SaveFile() や LoadFile() を使っていましたが、BOMがない場合に文字化けをしたり、改行コードの種類(CRLF、CR、LF)やBOMの有無がわからなくなるため、追加したTextFileクラスを使用するようにしてあります。
また、今後はCSVファイルなども扱えるようにしたいため、IFileと言うインターフェースを追加しました。これにより、例えば上書き保存をする際に、ファイルの種類によって、TextFile の save() と CsvFile の save() を呼び分ける必要がなくなります。

2. FormでTextFileクラスを使用するように変更

Formで保持していたパス、読み込み専用のフラグの代わりにTextFileクラスのオブジェクトを保持するようにしました。 また、ファイルの読み込み、書き込みも、このオブジェクトで行うように変更しました。

3. ウィンドウのタイトルに文字コードとBOMの有無を表示

ウィンドウのタイトルに開いているファイルの文字コード、BOMの有無を表示するように変更しました。

4. __クラスの追加

よく使うデバッグ用のメソッドなどを入れる予定です。

2. 動画


3. 画面

ウィンドウタイトルに文字コード、BOMの有無を表示するようにしました。

4. 補足

1. namespace について

動画中でパッケージと言ってますが、namespace の間違いですね。。 TextFileクラスは、Common.Files と言う namespace にしてあります。 Common 配下には今回のアプリ以外でも使えるような、共通で使用できるクラスを入れる予定です。

また、Files には「s」をつけて、Common には「s」をつけていませんが、 Files 配下には TextFile や CsvFile など、File と言う種類のクラスを入れるため、複数形にしてあります。
Common の方は、大きな種類に該当するため、単数形にしてあります。(集合名詞?)
また、Utils 配下の FileUtils クラスが FileUtil ではなく FileUtils と複数形にしているのは、
このクラスが便利メソッドを寄せ集めただけのクラスで、単独で使うメソッドが複数あるためです。
FileUtils にしましたが、FileUtils だと FileUtil が複数あるみたいなイメージになるので、FileUtil の方が良いですかね。

ただ、ここら辺の命名規則については、言語やライブラリの実装者によって異なるので、正直何が正しいのかよくわかりません。 あまりここで悩んでも時間がもったいないので、動けばいい!くらいの気持ちで割り切った方が良いかもしれませんね。

namespace を単数形にするか複数形にするかの勝手なイメージ
common {
  乗り物s { 異なる性質のファイルを追加する可能性がある場合は、単数形でもいいかも。
    車s {
      普通自動車クラス
      タクシークラス
      トラッククラス
    }
    
    飛行機s {
      旅客機クラス
      戦闘機クラス
    }
  }
  
  家族 {
    父クラス
    母クラス
    子クラス
  }
  
  家族s {
    2人家族クラス
    3人家族クラス
    4人家族クラス
  }

}

2. 文字コードの簡易判定について

普段、シフトJIS、UTF-8、EUC-JP しか使わないので、この3つに対してだけ文字コードの簡易判別をしています。 判別方法としては、文字化け時によく出る文字(普段使わない文字)の有無により判別しています。

まず UTF-8 に変換して、「�」がない場合は UTF-8、 「�」が出る場合はシフトJIS か EUC-JP。

シフトJISに変数して半角の、「、」「・」「」」が出る場合は、EUC-JP。

上記に該当しない場合は、シフトJISとしています。

5. 今後の課題

1. 右クリックメニュー対応

右クリックメニューでコピペが行えるようにする。

2. フォームの位置・サイズの保存と読み込み

終了時にフォームの位置とサイズを記憶し、次回、同じ位置とサイズで起動できるようにする。

3. その他

検索、grep、選択した数式の計算、大文字・小文字変換、半角・全角変換、10進数・16進数の変換、インデント調整、文字コード対応、ドラッグ&ドロップでファイルオープン、タブ化、ウィンドウの位置・サイズの保持、ファイルツリー・リストを付けた3ペイン構成にする、プラグインでテキストの加工を行えるようにする、プラグインでカレンダーをつけて日記をつけられるようにする、などなど。

ダウンロード

ver実行ファイルソース
1.0.4
2018/05/01
ncm_1_0_4.zipncm_1_0_4_src.zip