C#: 2006年2月アーカイブ
これまでWindows サービスを作るにはC++の知識が必須でしたが、.NETのおかげでかなり開発しやすくなりました。(処理速度的にどうよ、2000serverで動かないケースもあるよ、というのは置いといて)
まずは、フォルダの状態監視ツールでも作ってみましょう。
using System.IO; //状態監視の宣言 Private FileSystemWatcher fileWatcher = new FileSystemWatcher();あくまでサンプルです。こんなチンケなことしかできないわけではありません。Protected override void OnStart(strings[] args)
{
//監視対象のディレクトリを指定
fileWatcher.Path = @"E:¥watch_test";//フォルダサイズが変わったらイベントを起こす
fileWatcher.NotifyFilter = (NotifyFilters.Size);//起こすイベントの定義
fileWatcher.Changed += new FileSystemEventHandler(OnChanged);//監視を有効にする
fileWatcher.EnableRaisingEvents = true;
}Public static void OnChanged(System.Object source,FileSystemEventArgs e)
{
//これが変更時に起きるイベント
}
もっと多くのことが監視できます。ま、さわりです。
ファイル単位で監視したり、フォルダも多くのイベント、状態を監視できます。
わずか数行のコードでこれだけのことができるのですから、すごいですね。
業務アプリとかになると、色々な集計結果をCSVで出力する機能が要求されることが多いです。多いっていうか、ほとんどの場合あります。
.NETのDataSetは、XMLへの変換はメソッドを呼ぶだけで簡単にできるのですが、CSVへの変換はサポートしていません。これをなんとか効率的にやりたいなぁ、と思い、色々調べてみました。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="NewDataSet">
<xsl:apply-templates select="Table" />
</xsl:template>
<xsl:template match="Table">
<xsl:value-of select="Column_A" />,<xsl:value-of select="Column_B" />,<xsl:value-of select="Column_C" />
</xsl:template>
</xsl:stylesheet>
上記内容のXSLTファイルを作成します。XSLTとは、XSLT(XSL Transformation)でして、まぁ、XMLの変換テンプレートと思ってください。これを、hoge.xsltという名前で保存しておきましょう。
System.Xml.Xsl.XslTransform xslt = new System.Xml.Xsl.XslTransform(); xslt.Load(@"C:\hoge.xslt");System.Xml.XmlDocument doc = new XmlDocument();
doc.Load(@"C:\hoge.xml");System.Xml.XmlTextWriter csvWriter = new XmlTextWriter(@"C:\hoge.csv",System.Text.Encoding.GetEncoding("Shift-JIS"));
xslt.Transform(doc.CreateNavigator(),null,csvWriter,null);
csvWriter.Close();
このサンプルはXMLファイルを読み込んで、それをCSVに変換してC:\hoge.csvというファイル名で出力しています。
XSLTをみていただければわかるとおり、Column_A、Column_B、Column_Cというフィールドだけが出力されます。つまり、出力するCSVごとにXSLTが必要になります。フォーマットが決まっているのなら、まったく問題ないと思います。
このやり方は、速いです。1万件(フィールド数20件ほど)のXMLの変換に4~5秒でした。