ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

2015/04/03

【C#】文字列の先頭や末尾、部分一致をチェックする

photo by Tim Reckmann

よく「先頭が○だったらA処理、×だったらB処理」みたいな条件分岐がある。
そんなときに便利なのが、String.StartsWithString.EndsWith

var value = "ABC123";

if (value.StartsWith("A"))
{
  Console.WriteLine("先頭がA");
}

if (value.EndsWith("3"))
{
  Console.WriteLine("末尾が3");
}

単純に「先頭がこの文字列なら」と指定できる場合は、上記の方法で対処可能だ。

ただ、先頭が英字のみとか、末尾が数値のみというようなチェックの場合は、StartsWith、EndsWithが使えない。

2015/03/30

【C#】三角関数(sin, cos, tan)を使う

photo by Daniel Kulinski

某サイトでプログラミング学習をしていたとき、業務ではほぼ使わないであろう三角関数に引っかかった。
結論から言うと、MathクラスにSin, Cos, Tanというメソッドを持っているので、それを使えばよい。

2014/11/01

【C#】paizaの煩わしいテスト(入力処理)を自動化したい

C# で paiza のテストをするのは非常に面倒。
なんせ「Console.ReadLine();」の入力は、コピペで入力できないし、手入力するにも限界がある。

ということで、テスト駆動開発を取り入れるために、入力処理を自動化する方法を考えた。


ちなみに、この記事はある問題に対する解答やヒントなどは一切書きません。
テスト方法だけなら、利用規則 第8条 10項には抵触しないですよね、paizaさん?


paiza (paiza)利用規約
第8条(禁止事項)
10項:ブログ・SNS等本サイト以外の媒体(インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。)上において、当社が出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆及びカンニング等の不正を助長する内容等を掲載する行為.。

http://paiza.jp/guide/kiyaku

2014/10/25

【C#】配列やリスト(List)のソート処理5種

とりあえずデータを配列やListに突っ込んで、後でソートしたいときのいろんな方法をまとめる。
  • Arrayクラスを使う場合
  • Listクラスを使う場合
  • LINQを使う場合
  • SortedListやSortedDictionaryを使う場合

2014/10/18

【C#】Math.Round()が四捨五入にならない!

四捨五入した結果が欲しいのに、なぜかうまく計算されずハマってしまった。
調べてみるとMath.Round()は、四捨五入ではなく近似値を表示するようだ。

といっても実際のところMath.Round()が原因というよりは、double型の誤差が原因だった。

2014/10/12

【C#】正規表現で一致した部分だけを取得する

正規表現で一致したかどうか判定するには、Regex.IsMatchのように割りと簡単にできる。
しかし、一致した箇所を取得するとなるとちょっと面倒。

その方法をまとめる。

【C#】テンプレートメッセージを使ってメールを送信する

メールを送る処理は、C#でコンソールアプリケーションを作っているとよくある。
ただ、コード内にメール内容を書いてしまうと、修正が困難になる。

そこでメールのテンプレートをテキスト形式で外出しにし、C# で読み込み編集してメールを送る処理をつくってみた。

以降、私が実際に作成した「処理の完了を通知するアプリ」を例にとって説明していく。

2014/10/11

【C#】csc.exeでコンパイルするときにConfigファイルを読み込む

Visual Studioで開発すると、同じプロジェクト内にapp.configというファイルを追加すれば、何も考えずにConfigurationManagerを使ってConfigファイルにアクセスすることができる。

しかし、テキストエディタや、QuickSharp(QuickSharpについて)で開発したりすると、そもそもソリューションやプロジェクトファイルが作られないので、明示的にConfigファイルを読み込まなければならない。

【C#】フォルダ配下をGrepして行番号と文字列を取得する

あるプログラムでGrep結果を取得したい場合、コマンドプロンプトの「FINDSTR」やサクラエディタの「GREP」などのコマンドを使えば、Grepはできる。
しかし、その結果を戻り値として受け取ることができない。

そこで、仕方なくC#でGrepする機能を実装してみた。

2014/10/05

【C#】DateTimeにnullを入れるとエラーになる件

DateTimeにnullを入れようとすると、「Null 非許容の値型であるため、null を 'System.DateTime' に変換できません。」というエラーになる。

以下のようなにDBから日付項目が取得できなかったら、呼び出し元に「取得できなかった」ことを知らせるためにnullを返そうとして怒られた。
public DateTime GetDBDate()
{
    // DB取得
    if (DBNull.Value.Equals(dr["date"]))
    {
        // ここでエラーになる
        return null;
    }
}


DateTimeは構造体のため、C#では値型として扱われる。
そのため、nullを設定することができない。

2014/09/28

【C#】Stringとstringの違いと使い分け

なんとな~く使っている大文字の「String」と小文字の「string」の違いについて調べてみた。

結論から言うと、以下の通り。


C# では、string キーワードは String のエイリアスです。 したがって、String と string は等価であり、どちらの名前付け規則を使用してもかまいません。

文字列 (C# プログラミング ガイド)
stringはSystem.Stringクラスのエイリアス(別名)
だからどっちを使っても問題ない。


2014/09/21

【C#】軽量なIDEならQuickSharpがオススメ

Visual Studio(Visual C#)を使うほどでもないけど、テキストエディタだとちょっと物足りない。
そんなあなたには「QuickSharp」がオススメ!



QuickSharp の特徴



http://quicksharp.sourceforge.net/features.php より引用して、適当に訳したのがこちら。
  • シンタックスハイライト、コードの折りたたみ、VisualStudioっぽいドッキングウィンドウを持ったエディタで開発ができる
  • .NET Framework系の言語ならコンパイルできる
  • コンパイルエラーや警告をメッセージウィンドウに出力できる
  • コンパイル・実行でき、別ウィンドウで対話型な実行もできる
  • インテリセンスっぽいコード補完もできる
  • 付属の「Cassini web server」でWebアプリの開発もできる
  • SQL Server、SQLite、MySQLが使える
  • MonoやC#2.0、3.0、4.0、4.5など用途に合わせて複数のビルドツールが使える
  • QuickSharpのプラグインを自分で作ることができる


軽量な環境で、WindowsフォームやASP.NET、コンソールアプリなどの開発ができちゃうのだ!
ただ、軽い分以下のことができなかったり、面倒だったりする。
 
  • ソリューションやプロジェクトファイルが作れない
  • デバッグ実行ができない
  • コード補完が思いの外しょぼい
 

こんな欠点があっても、やはり軽さに魅力がある。
Win環境で小さなアプリをつくるなら、バッチファイルやWSH(VBScriptやJScript)、PowerShellをテキストエディタで書くより、格段に効率が良い。


2014/08/30

【C#】IPアドレスの有効性チェックと注意すべき点

入力されたIPアドレスが正しいかどうかという有効性チェックが必要になり、いろいろ調べてみた。
入力された値が0 ≦ n ≦ 255でコンマは3つあって…なんてif文で書くのは馬鹿らしいので今すぐやめよう!


2014/08/02

【C#】TypeクラスやInvokeMember、GetTypeって何なの?

仕事で既存システムの改修をしているときに、さっぱり理解できない処理がでてきた。
それが「Type.InvokeMember」だった。

「Type」は型引数的なサムシングだろう。
「Invoke」はT.M.Revolution的なサムシングだろう。
「GetType」はT.M.Network的なサムシングだろう。

なんて漠然としてイメージしかなく、T.M.Revolutionがどうやって処理に組み込まれ、風になびいているかなんて全くもって理解できない。
『♪凍えそうな季節に君はバグをしーよー(仕様)と云うのー♪』というのであれば、身に覚えがなくはない。

「GetType」にしたってT.M.Networkが『♪Get Wild And Type♪』って歌ってるけど、Type.GetTypeはあってもType.GetWildなんて検索しても見つかりゃしない。

だから、どうしてもTypeクラスという現代社会の闇を理解できなかった。
と、ひと通り脱線したところで、このままじゃ仕事にならないので、Typeクラスについて調べてみた。

2014/07/22

CSharper(C#)がJavaに触れて戸惑った4つの仕様

世の中には「Java技術者のためのC#講座」は掃いて捨てるほどあるのに、「C#技術者のためのJava講座」がほとんどない。

私自身、C#をメイン言語として仕事をしてきた。
Javaは学生の頃、プログラミングの必修科目で触っただけで思い入れもなにもない。

そんなCSharperが会社の命令により、Javaを勉強することになった。
そのときに戸惑った4つの仕様をまとめる。


2014/07/19

【C#】マジックナンバーを駆逐してやる!定数クラスの作り方


マジックナンバー(あいつ)ら......駆逐してやる!

このプロジェクトから......ひとつ残らず!


そんな感情をむき出しにしてしまうほど、マジックナンバーというやつに憎悪を感じる。
正確には、なんの躊躇もなくマジックナンバーを使うプログラマに憎悪を感じている。

そもそもマジックナンバーとは以下のようなものだ。


プログラムにおけるマジックナンバー(魔法数字)とは、何らかの識別子として用いられるプログラム中に書かれた具体的な数値である。そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたとき閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。まるで魔法の数字だ」という皮肉を含む。
引用元:マジックナンバー (プログラム) - Wikipedia

2014/06/30

【ASP.NET】JavaScriptからWeb.configを取得する方法

結論から言うと、JavaScripからWeb.configを直接読み書きすることはできない。(と思う。)しかし、ちょっと手間ではあるが間接的に取得する方法がある。

一般的な手順としては、以下の通り
  1. コードビハインドでWeb.configを読み込む
  2. 取得した値をWebフォームのHiddenFieldなどに保持する
  3. JavaScriptからWebフォームの項目にアクセスし、値を取得する

こうすれば簡単なのだが、場合によっては項目追加ができないときもあるだろう。
じゃぁ、項目を追加しないでどうするのさ?

前置きが長くなってしまった。

項目を追加せずにJavaScriptからWeb.configの値を取得する方法をまとめていく。

2014/06/21

【C#】文字列をDateTime型に変換する

業務ロジックでよくあるのが「日付の妥当性チェック」
DateTime.TryParse()を使えば簡単なのだが、そんな時に限って日付を文字列(yyyyMMdd形式)で保持している。

DateTime型に変換してTryParseを使うには、日付を“yyyyMMdd”から“yyyy/MM/dd”に変換しなければならない。もちろんString型はToString("yyyy/MM/dd")なんてことできない。

“yyyyMMdd”を“yyyy/MM//dd”に変換する3つの方法をまとめていく。


2014/06/07

【C#】SQLを書くときはStringBuilder.AppendLineを使うべし

プログラム内でSQL文を書くことがよくある。
しかし、記述方式がまちまちで、見難いし腹が立ってくる。

だから「こう書け!」というのをまとめてみた。


ダメなコーディング


// ダメな例
string query = String.Empty;

query += "SELECT ";
query += "    DENPYONUM ";
query += "   ,ITEM ";
query += "FROM ";
query += "    DENPYO";
query += "WHERE ";
query += "    CHUMONBI >= '20140101'";


ダメな理由


  • string型の文字結合(+)は性能問題がある
  • 抽出条件にリテラルが使用されている
  • バグが見つけにくい

なぜリテラルを使っちゃいけないかというと
こちら→【PL/SQL】性能改善のためのバインド変数(ホスト変数)の使い方 を参照してほしい。


2014/05/10

【C#】DataGridViewのデータをXMLに保存・読み込みする


以前にC#で設定をXMLファイルに保存・読み込みするという記事を書いたが、今回はちょっと変わってXMLからDataGridViewに読み込み、DataGridViewからXMLに保存する方法をまとめていく。

まずはWindowsフォームの準備から。
以下の表にしたがってフォームにコントロールを設置する。

コントロール 名前 プロパティ 設定値
TextBox textBox1 Multiline true
ScrollBars Both
DataGridView dataGridView1
Button ReadXmlButton Text Read XML
Button WriteXmlButton Text Write XML
Button ShowSchemaButton Text Show Schema
DataSet SlipsDataSet DataSetName SlipsDataSet



設置・設定をしたのがこちら
ここからXMLの保存と読み込みを実装する。