RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

C#

(C#)カスタムソート

解説 C# におけるカスタムソートの方法を紹介します。 たとえば、文字列の長さを優先してソートする例は以下の通り。

(C#)複数の文字列をすべて置き換える(最長一致)

解説 文字列を「やさしい→優しい」「いい→良い」のようなルールで置き換えることを考えてみましょう。1単語ずつ置き換えると、 「やさしいいいひと」→「優しいいいひと」→「優し良いいひと」→「優し良良いひと」 のように範囲が被ってしまい、うまくいきま…

(C#)続・曜日を数値にする魔法

作ったもの 日月火水木金土 → 0, 1, 2, 3, 4, 5, 6 に変換する関数です。 曜日を数値に変換する方法については、以下のようにいろいろ紹介しましたが、今回発明したものは、非常に動作が軽いです。 (C#)文字列で場合分けするときは、Dictionary を使うことが…

(C#)Excelファイルを読み書きする

作ったもの Excel ファイルの読み書きには、NPOI というライブラリが便利です。ファイル入出力やセルのアクセスをできるだけ短く記述できるように、クラスを作成しました。

(C#)数字の先頭を0で埋めてNケタの文字列にする方法

解説 今回は、先頭の数字を0で埋めてNケタの文字列にする方法を紹介します。 2ケタにする:1→01 8ケタにする:123→00000123

(C#)docxファイルの文章を簡易編集する

作ったもの Microsoft Word 2007 以降の docx ファイルは、中身が zip 圧縮された xml ファイルなので、ZipArchive で展開すれば編集することができます。 今回作ったのは docx の document 部分(文字で書かれている箇所)の xml を書き換えるクラスです。

(C#)ベンチマークを簡単に計測する方法

作ったもの C#で処理速度を計測するためには、System.Diagnostics.Stopwatch を使います。ただ、これを毎回書くのは結構疲れてしまうので、簡単に計測できる関数を作りました。

(C#)フォームのバックグラウンドで重い処理をしながら、UI を変更したい

解説 フォームアプリの Click イベントの中で、重い処理をしてはいけません。UI がフリーズしてしまいます。その時は、別のスレッドでバックグラウンド処理(非同期処理)を行います。 しかし、別スレッドから UI を操作してはいけません。例外が発生してし…

(C#)文字列で場合分けするときは、Dictionary を使うことができる

解説 文字列の内容によって、処理を変えたい場合があります。その場合は、 ① if...else...で条件分岐をする ② switch...case...で条件分岐をする ③ Dictionary で string からのマッピングを作る などの方法があります。 今回は、日月火水木金土の文字列を入…

(C#)数値で場合分けするときは、配列を使うことができる

解説 1月は31日まであり、2月は28,29日あり、3月は31日まであります。これは、 1 → 31 2 → 28か29 3 → 31 4 → 30 のような数字と数字のマッピングだという事ができます。 今回は、年と月→その月が何日まであるか、という関数を2つの方法で実装します。 ① 月…

(C#)ある月が、何日まであるかを調べる

作ったもの 例えば2019年2月は28日までありますが、2020年2月は29日まであります。今回はY年M月が何日まであるかを調べる関数を紹介します。

(C#)インナー関数を使わずに、ラムダ式で関数内に関数を書く

解説 C#7.0で、関数の中に関数を書く「インナー関数」がサポートされました。それ以前のバージョンでは、関数内に関数を書くためには、ラムダ式を使う必要があります。今回はラムダ式を使って関数内関数を書いてみます。

(C#)アプリケーションの設定を簡単に読み書きするクラス

作ったもの アプリケーションの設定を簡単に読み書きするクラスを作りました。ウィンドウのサイズ、最後に開いたファイルなどを保存するのに使えます。

(C#)AppData内の設定ファイルの保存先

作ったもの ウィンドウの位置、最終起動時刻、最近使ったファイルなど、設定データを保存する際は、AppData\Local\[会社名]\[アプリケーション名] に保存するのが望ましいです。そのフォルダパスを取得するコードを紹介します。

(C#)文字コードを判別して、テキストファイルを読み込む方法

作ったもの 日本語テキストファイルのエンコード方式には、以下のようなものがあります。 ①UTF-16(LE, BE) ②UTF-8 ③Shift-JIS ④EUC-JP これを自動的に判定して読み込む関数を作りました。