改行コード変換ツールを自作しよう(最終回・全ソース解説~配布まで)

C#入門
この記事は約6分で読めます。

今回は全ソースの掲載とイベントハンドラ、メソッドの説明をしたいと思います。

特にドラッグ&ドロップの部分は他のプログラムで流用できるようにしましたので、是非ご活用下さい。

全体のソースコード

全体のソースコードは以下の通りです。

全体に軽く目をとおして頂いてから、詳細の解説をお読みいただければより分かりやすいと思います。

尚、Visual Studio 2019 のプロジェクトファイル一式は、下記からダウンロードできますので、入力が面倒という方はご利用ください。

先頭のusing 宣言

今回はファイルの読み込みが発生するため、先頭の10行目に using System.IO を手動で追加しています。

コンストラクタ

ファイル文字コード変換ツールと同様、今回もコンストラクタに特に何も記述していません。

自動生成された状態です。

Loadイベントハンドラ

ファイル文字コード変換ツールと同様、LoadイベントにComboBoxの選択項目の登録処理を記述しています。

また、TextBoxに対してドラッグ&ドロップの機能を追加する処理(SetDragDropの呼び出し)を追加しました。

実行ボタンクリックイベント

この処理は非常に簡単で、画面のComboBoxに選択されている改行コードを制御コードに変換し、Replaceメソッドにより文字列置換した結果を、変換結果表示用のuxAfterText.Text に代入しているだけです。

エスケープシーケンス

改行コードを変換したい人は既にご存知のはずですが、知らない人の為に解説しておきます。

テキストデータに対して改行コードやタブコードなど、特別な意味を持つ文字がいくつか用意されており、これを制御コードとか制御文字と呼んでいます。

例えば、”ABCDEF”という文字列を表示する際、”AB”と”CDEF”の間で改行させたい場合、そこで改行してしまうとC#の構文では有り得ない記述になるため、ビルドエラーが発生してしまいます。

この時、”AB\nCDEF” と言う風に \(バックスラッシュ)+特定の文字を入れることで改行表示してくれます。

この 「バックスラッシュ+特定文字」のことをエスケープシーケンスと言い、次の様な種類が用意されています。

エスケープシーケンス意味
\’シングルクォーテーション「’」
\”ダブルクォーテーション「”」
\\バックスラッシュ「\」
\0null文字
\aベル(警告音)
\bバックスペース
\fフォームフィード
\n改行(ラインフィード LF)
\rキャリッジリターン(CR)
\t水平タブ
\u16進表記のUnicode文字
\U16進表記のUnicode文字
\x16進表記のASCII文字
\v垂直タブ

ちなみにこのバックスラッシュは、キーボードの¥マークのことなのですが、プログラムによって \と表示されたり ¥として表示されますが、同一のものです。

改行文字⇒エスケープシーケンス

ComboBoxから取得した改行文字列を、エスケープシーケンスに変換する処理が以下になります。

Windowsの改行コードはCRLFなので、”\r\n” と記述しても良いのですが、EnviromentクラスにNewLineプロパティがあって、OSに応じた改行コードを返してくれますので、こちらを使いました。

クリップボードへコピー

クリップボードへコピーボタンがクリックされたら、変換結果のTexBox が空かどうか確認し、空でない場合のみクリップボードにコピーするようにしています。

ドラッグ&ドロップ追加処理

コントロールに対してドラッグ&ドロップを受け付けるには、次の手順が必要になります。

  • ドラッグ&ドロップを受け付けるためにAllowDropにtrue を代入
  • ドラッグ&ドロップが開始されるとDragEnterイベントが発生するので、ドラッグ&ドロップ用のマウスカーソルを設定
  • ドラッグ&ドロップが完了したらDragDropイベントが発生するので、意図したデータがドラッグされたかを確認し、データを受け取る。

上記の事を念頭にソースコードを確認してください。

ラムダ式によるイベントハンドラの記述

イベントハンドラを作るには、コントロールをダブルクリックするか、VisualStudioのプロパティから選択する方法が多いですが、ラムダ式を使って直接記述することも出来ます。

ラムダ式については こちら の記事中に軽く解説していますので、合わせてお読みください。

この様に、わざわざイベントハンドラを生成しなくてもコードの中で定義することが可能です。

この方法の利点は、今回の様に関数化(メソッド化)して流用しやすい点です。

ドラッグ&ドロップされるファイルは複数

ドラッグ&ドロップされるとファイル名が受け取れるのですが、1つだけとは限りません。

そこで、文字列配列として受け取ることになります。

string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);

しかし、今回は1つのファイルだけをドラッグ&ドロップしたいので、fileName[0] という風に最初に渡される名前だけを使って、ファイル読み込みを行い、Textプロパティに代入するようにしています。

control.Text = File.ReadAllText(fileName[0],Encoding.GetEncoding(“shift-jis”));

プログラムを配布するには

プログラムを他のPCへコピーして使う方法(配布方法)は、「CSV結合ツールを自作しよう!(最終回・プログラムの配布編)」の記事の中で、具体的な操作方法や注意点を解説しています。

フォルダ名やファイル名を読み替えて、必要なファイル3~4個をコピーして頂ければ他のWIndows10 PCで動かすことが出来ます。

まとめ

今回は改行コード変換ツールの全ソースコードの掲載と解説を行いました。

ドラッグ&ドロップ以外は非常に簡単だったのではないでしょうか。

ドラッグ&ドロップは少し複雑かもしれませんが、やっている事は単純です。

他のプログラムへの流用や改造もしやすいと思いますので、自分なりにより良い形に変更して使っていただければ幸いです。

タイトルとURLをコピーしました