JScript.NET  新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
Written 8/10/03
JScript.NET
入出力(1)
標準入出力
標準入出力を行うには次のようにしてください。
    import System;
    
    var str : String;
    str = Console.In.ReadLine();     //標準入力
    Console.Out.WriteLine(str);      //標準出力
 
コマンドラインで次のように入出力されます。
    abc     キーボードから入力
    abc     出力
 
System.ConsoleクラスのInプロパティで標準入力、 Out プロパティで標準出力用のオブジェクトが得られます。
最も最後の行は、
    Console.WriteLine(str);
 
とするでしょうね、ふつうは。
標準エラー出力
標準エラー出力するには次のようにします。
    import System;
    
    Console.WriteLine("aaa");        //標準出力
    Console.Error.WriteLine("bbb");  //標準エラー出力
 
例えば、これをコンパイルしてできたコマンドをstderrとすると、
    >stderr
    aaa
    bbb
 
標準出力をリダイレクトすれば、
    >stderr > z
    bbb
 
標準エラー出力をリダイレクトすれば、
    >stderr 2> z
    aaa
 
となります。
テキストファイル
ファイルから1行ずつ読むには、StreamReaderクラスを使います。
    cat.js
    ---------------------------------------------------------------------
    import System;
    import System.IO;
    
    var args : String[] = Environment.GetCommandLineArgs();
    if(args.length == 1) {       //引数がない場合
        System.Console.Error.WriteLine("usage : cat file1 [file2 ...].");
        Environment.Exit(1);
    }
    
    //引数ごとに出力
    var stream : StreamReader;
    for(var i = 1; i < args.length; i++) {
        try {
            stream = File.OpenText(args[i]);
        }
        catch(e) {       //エラー処理
            System.Console.Error.WriteLine(
                            "error : can't open " + args[i] + ".");
            Environment.Exit(1);
        }
        var str : String;
        while(stream.Peek() > -1) {
            str = stream.ReadLine();        //1行ずつ読んで
            System.Console.WriteLine(str);  //書く
        }
        stream.Close();
    }
 
まず、Fileクラスの静的メソッドの OpenTextStreamReaderオブジェクトを得ます。
そのReadLineメソッド1行読みます。
Peekメソッドは次に読むべき文字をintで返します。 もう読む文字がなければ-1を返します。
しかし、次のようにコマンドラインに打ってみると、
    >cat cat.js
 
ファイルの内容がそのまま表示されるはずが、 日本語部分が化けてしまいますね。 これはファイルというかストリームをバイトじゃなくて文字として読むのですが、 Unicodeでエンコードされていると思って読んでいるからです (ASCII文字はUnicodeじゃなくてもOKだけど)。
Shift-JISなら次のように StreamReaderを開かなければなりません。
    cat2.js
    ---------------------------------------------------------------------
    import System;
    import System.IO;
    import System.Text;
        ...
    for(var i = 1; i < args.length; i++) {
        try {
            stream = new StreamReader(
                            args[i], Encoding.GetEncoding("shift-jis"));
        }
            ...
    }
 
このようにEncodeを指定するとうまくいくので試してみてください。
ファイルに書き込むにはStreamWriterクラスを使います。
    sin.js
    ---------------------------------------------------------------------
    import System;
    import System.IO;
    import System.Text;
    
    var stream : StreamWriter;
    try {
        stream = new StreamWriter(
                    "sin.csv", true, Encoding.GetEncoding("shift-jis"));
    }
    catch(e) {       //ファイルがオープンできない
        System.Console.Error.WriteLine("error : can't open sin.csv.");
        Environment.Exit(1);
    }
    for(var i = 0; i < 360; i++)
        stream.WriteLine("{0,3:D}°,{1,11:F7}",
                    i, System.Math.Sin(i * System.Math.PI / 180));
    stream.Close();
 
上は0°〜359°までのサインの値の表を作ります。
まず、StreamWriter オブジェクトをファイル名とEncodeを指定して得ます。 trueは上書き可能の意味です。 そして、WriteLineで書き込みます。
入出力(2) exit