gorogoronyan FC2

C#: テキストファイルの読み書き

Node.js に関連して C# のはじめの一歩の話です。

Node.js ではテキストファイルの文字コードは utf-8 しか扱わないので、 シフト JIS ファイルとの変換が必要になったら眺めてください。

Windows には C# のコンパイラが標準で付属しています

シフトJIS → UTF-8 に変換

下は C# のプログラムです。ファイル名 sjis2utf8.cs で保存して下さい。

/* 2014/06-2015/06
シフトJIS→UTF8 に変換

ファイル名:sjis2utf8.cs
コンパイル:
  csc sjis2utf8.cs
デバッグ用のコンパイル:
  csc /debug+ sjis2utf8.cs

実行:
  sjis2utf8 (src) (dst)
例:
  sjis2utf8 sjis.txt utf8.txt
*/
using System;
using System.IO;
using System.Text;

class Program {

	static Encoding SHIFT_JIS = Encoding.GetEncoding("Shift_JIS");
	static Encoding UTF8 = Encoding.GetEncoding("utf-8");

	static void Main(string[] args){
		try{
			string src = args[0];
			string dst = args[1];
			string text = File.ReadAllText(src, SHIFT_JIS);
			File.WriteAllText(dst, text, UTF8);
		}
		catch(Exception e){
			//Console.WriteLine(e.ToString()); 
			Console.WriteLine(e.Message); 
			Console.WriteLine("使い方\nsjis2utf8 (src) (dst)\n  src:シフトJISファイルのパス\n  dst:UTF-8ファイルのパス"); 
		}
	}
}

コンパイルと実行 (Windows10 の場合)

下は2020年頃の Windows10 の例です。 C# のコンパイラ (csc.exe) があるフォルダは Windowsのバージョンによって変わるかもしれないので、 C:\Windows 以下のフォルダを眺めて確認して下さい。

C#のコンパイラ(csc.exe)があるフォルダ (Windows10)
C#のコンパイラ(csc.exe)があるフォルダ (Windows10)
1) コンパイラ (csc.exe) へのパスを通す。
  path=%path%;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319

  パスを通す話は プロンプト:アプリケーションを起動する・その2 も参照ください。

2) ソースをコンパイルする。
  csc sjis2utf8.cs

  参考:デバッグメッセージを表示するときのコンパイル
  csc /debug+ sjis2utf8.cs

  e.ToString() などでエラーが発生したソースの行位置を知りたい場合には
  /debug+ を付けてコンパイルします。プログラムをデバッグ中のときには
 こちらを使用します。

  コンパイルに成功すると、sjis2utf8.exe が作成されます。

3) プログラムを実行する。
  sjis2utf8 (シフトJISファイルのパス) (UTF-8ファイルのパス)

実行例

シフト JIS のテキストファイル sjis.txt を用意します。 以下、Windows10 でコンパイルと実行を行った例です。 UTF8 のテキストファイル utf8.txt が作成されます。

C# のプログラムのコンパイルと実行の例(Windows10)
C# のプログラムのコンパイルと実行の例(Windows10)

UTF-8 → シフトJIS の変換

上のソースの File.ReadAllText と File.WriteAllText の SHIFT_JIS と UTF8 を逆にします。 別のファイル名(例えば uft2sjis.cs など) でソースを保存してコンパイルしてください。

XML ファイルの書式をチェックするサンプル

XML ファイルを読んで、 書式に誤りがあれば行・カラムのエラー位置を エラーメッセージで表示します。 XML の書式で書かれた HTML5 のファイルでも使えます。

/* 2009,2014/07/09
・XMLファイルを読む
  XMLの記述に誤りがあるとエラーメッセージを表示する。
*/
using System;
using System.Xml;

public class Program {

	public static void Main(string[] args) {
		string path = null;
		try{
			path = args[0];
			XmlDocument doc = new XmlDocument();
			using(XmlTextReader r = new XmlTextReader(path)){
				r.XmlResolver = null; //DTD検証を無効にする。
				doc.Load(r);
			}  //using を抜けるときに close される。
			Console.WriteLine("正常:"+path);
		}
		catch(Exception e){
			Console.WriteLine("エラー:"+path+"\r\n"+e.Message);
		}
	}
}


/*
・ファイル名:TestXMLRead01.cs
・コンパイル
  csc TestXMLRead01.cs
  csc /debug+ TestXMLRead01.cs

・実行
  TestXMLRead01 (ファイル名)
  TestXMLRead01 sample.xml

◎参考

・下でも同じ
  string xml = File.ReadAllText(path);
  XmlDocument doc = new XmlDocument();
  doc.XmlResolver = null; //DTD の検証を無効にする
  doc.LoadXml(xml); //XMLを読む

・単純に下の処理だとまずい。
  XmlDocument doc = new XmlDocument();
  doc.Load(path); //XMLファイルを読む

  XHTML など DOCTYPE に DTD の URL があると、dtd をダウンロード
 して検証しようとする。
  XHTML の場合は www.w3c.org から DTD をダウンロードしようとする。

*/
コンパイルと実行の例(Windows10)
コンパイルと実行の例(Windows10)

関連

C#: XML/XHTML チェックツール
XML の書式チェックや XHTML の DTD 検証を行うツールです。 上のサンプルプログラムに GUI をつけて ファイルのドラッグ&ドロップで処理できるようにしたものです。 C# のプログラムでソースも付けてあります。

関連

inserted by FC2 system