C# の配列の基本を復習。配列、リストアレイ、ジェネリック、ディクショナリ
コレクションについて復習をかねて色々調べてみた
まずは普通の配列
static void Main(string[] args) { int[] ArryTest = new int[5]; for(int i = 0;i < 5; i++) { ArryTest[i] = i + 100; } for (int i = 0; i < 5; i++) { Console.WriteLine(ArryTest[i]); } }
出力
100 101 102 103 104続きを読む
FileSystemWatcherを使って特定フォルダの監視(シングルスレッド)
これまた仕事でよく使う「特定フォルダを監視してファイルが生成されたら何らかのアクションを行う」という機能を実装してみた。
まぁ「何らかのアクション」って書きましたけど、「テキストファイルをDBに取り込む」のが大半なんですけどねw
とりあえずファイルの生成アクションは下記で取得可能らしい。
FileSystemWatcher.NotifyFilter = NotifyFilters.FileName
本来はWindowsFormアプリケーションで実装すべきなんだけど、マルチスレッドプログラミングの知識が必要らしいので今回はここまで。
FileSystemWatcher クラス (System.IO)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; // 追加 namespace FileSystemWatcherTest { class Program { static void Main(string[] args) { FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = @"C:\tmp"; watcher.Filter = "*.csv"; watcher.IncludeSubdirectories = false; //watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite // | NotifyFilters.FileName | NotifyFilters.DirectoryName; watcher.NotifyFilter = NotifyFilters.FileName; // ファイルの生成ならこれだけでよい watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnCreated); watcher.Deleted += new FileSystemEventHandler(OnDeleted); watcher.Renamed += new RenamedEventHandler(OnRenamed); watcher.EnableRaisingEvents = true; Console.WriteLine(watcher.Path + "を監視中..."); Console.ReadKey(); } private static void OnRenamed(object sender, RenamedEventArgs e) { Console.WriteLine("Rename: " + e.FullPath + " " + e.ChangeType); } private static void OnDeleted(object sender, FileSystemEventArgs e) { Console.WriteLine("Delete: " + e.FullPath + " " + e.ChangeType); } private static void OnCreated(object sender, FileSystemEventArgs e) { Console.WriteLine("Create: " + e.FullPath + " " + e.ChangeType); } private static void OnChanged(object sender, FileSystemEventArgs e) { Console.WriteLine("Change: " + e.FullPath + " " + e.ChangeType); } } }
TextFieldParserのサンプルを作ってみた
仕事でCSVやらTXTやらのテキストファイルを扱うことが多いのでTextFieldParserメソッドのサンプルを作ってみた。
固定長の場合、FieldWidthsプロパティの文字幅はバイト単位ではなく文字数単位らしい。 使えない…
[参照の追加] で Microsoft.VisualBasic.dll の追加を忘れずに。
データ
"11111","AAAA""AA" "22222","BBBBBB " #"22222","BBBBBB "
ソース
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using Microsoft.VisualBasic.FileIO; namespace TextFieldParserTest { class Program { static void Main(string[] args) { List<Data> CsvData = new List<Data>(); string csvFileName = @"C:\tmp\test.csv"; // ファイル名 Encoding Encode = Encoding.GetEncoding("Shift_JIS"); // Encode指定 using (TextFieldParser Parser = new TextFieldParser(csvFileName, Encode)) { Parser.TextFieldType = FieldType.Delimited; // フィールド区切りタイプ Parser.Delimiters = new string[] { "," }; // 区切り文字 Parser.HasFieldsEnclosedInQuotes = true; // ダブルコーテーション区切り Parser.CommentTokens = new[] {"#"}; // レコード先頭のコメント文字 Parser.TrimWhiteSpace = true; // フィールドの前後スペースを削除 // データ読み込み while (!Parser.EndOfData) { string[] fields = Parser.ReadFields(); Data data = new Data(); data.F1 = fields[0]; data.F2 = fields[1]; CsvData.Add(data); } // Console出力 foreach (var n in CsvData) { Console.WriteLine(n.F1+" "+n.F2); } Console.ReadKey(); } } public class Data { public string F1 { get; set; } public string F2 { get; set; } } } }
JIS丸め
JIS丸めについてうまく思い出せなかったのでメモ。
種類 | 四捨五入 |
---|---|
一般的 | 0.5以上切り上げ |
JIS丸め | 0.5以外は同じ。0.5が四捨五入後が偶数になるように処理。 |
四捨五入後の値を合計する場合等、通常の四捨五入だと誤差が大きくなるため。 JIS丸めでも偶数や奇数の偏りがあった場合は誤差は発生する(通常の四捨五入より抑えられるが)
ExcelのRound関数は一般的な四捨五入で、ExcelVBAのRoundはJIS丸めなのは有名な話。
C#でも書いてみた。 一般的な四捨五入にするにはMidpointRounding.AwayFromZeroが必要らしい。
static void Main(string[] args) { Console.WriteLine(Math.Round(2.5)); // 2 Console.WriteLine(Math.Round(2.5, MidpointRounding.AwayFromZero)); // 3 }
氷菓の未収録短編を読みに滋賀県まで行ってきた
僕の大好きな氷菓こと古典部シリーズには単行本未収録の短編が3つあります。
- 連峰は晴れているか
- 鏡には映らない
- 長い休日
このうち、一番上の「連峰は晴れているか」はアニメで映像化されたのでいいとして、残りの2つがどうしても気になっていました。
単純に単行本未収録なだけであれば文庫化を気長に待つのですが、摩耶花が奉太郎を嫌っていた理由が明かになる「鏡には映らない」、奉太郎が"やらなければいけないことなら手短に"を言い出したきっかけとなる事件を扱った「長い休日」とくればもうコレは読むしかありません。
とはいえもう何年も前に出た小説雑誌なので当然書店では売っていませんし、Amazonのマーケットプレイスで見ても数千円~数万円(!)とかなりのお値段。
文庫を待つしかないかなーと諦めてきたのですが、「そうだ!図書館があるじゃないか!」と紙のお告げがありまして。
最近は図書館の在庫をWebで検索できるんですよね。便利な世の中です。
今回探したのは古典部シリーズが掲載されている「野性時代」の2012年8月号(鏡には映らない)と2013年11月号(長い休日)の2冊です。
あんまり置いてない
まずそもそも野性時代のバックナンバーをそれなりに揃えている図書館が京都、滋賀、大阪、兵庫、奈良でも京都の城陽市立図書館、兵庫の加古川市立図書館、と今回行った賀県湖南市立図書館の3館しかなく、しかも僕の読みたい2冊を揃えていたのは湖南市立図書館だけでした。
加古川市立図書館は2013年1月分からしか置いてないのでNG。城陽私立図書館はかなり揃っているのに、僕が狙っている2012年8月号だけ紛失で貸出不可とか!(誰かパクった?)
湖南市なら高速で1時間ですし、十分行ける!ということで家族を連れて行ってきました。
貸出は湖南市在住か通勤、通学している人のみということで、その場で読んできました。
図書館ってコピーできるのね
いやぁ面白かった。行った甲斐がありました。
主人公である奉太郎のあのモットーの背景にはあんな事件があったとは…
もうホント映像化してほしいです。
繰り返し読みたいので「どうしても貸してもらえませんか?」と司書の方に相談したところ、「短編ならコピーされてはいかがですか?」と一言。
もう速攻でコピーしちゃいました。
「鏡には映らない」が30枚、「長い休日」が10枚なので合計40枚の400円。安い。図書館最高。
感想
まだ読み込んでいないので感想は書けません...
が、とにかくこの2本は氷菓好きなら必読です。
早く単行本化しないかなぁ。