標準入出力を行うには次のようにしてください。
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クラスの静的メソッドの
OpenTextで
StreamReaderオブジェクトを得ます。
その
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で書き込みます。