これまで幾度となくLine Input #に相当する物を求める要望や実際に作られた物を拝見してきましたが、ようやくLine Input #に代わる、1行読み込みの手段をAB5に用意しました。こんな感じです。
#console
Imports ActiveBasic
Imports ActiveBasic.Strings
Imports System
Imports System.IO
Try
Print "Input filename: ";
Dim filename = Console.ReadLine
Dim sr = New StreamReader(filename)
Dim i = 1 As Long
Do
Dim s = sr.ReadLine
If IsNothing(s) Then
Exit Do
End If
s = s.Replace(Ex"\\t", " ")
Print SPrintf("%3d: %s", New Int32(i), s)
i++
Loop
Catch e As Exception
Print "エラー:"; e.ToString(), Hex$(e.HResult)
End Try
Console.ReadLine()
ExitProcess(0)
ユーザから指定されたファイルを先頭に行数を付け、タブを4文字の空白に展開して出力するプログラムです。
End命令ではなくExitProcess関数を使っている理由は、Endで終わらせると終了処理の最中にプログラムが落ちるためで、ExitProcessでごまかしています。ここらへんはAB5が未完成ゆえのことです。
簡単に解説しておくと、Console.ReadLineはコンソール画面から、StreamReaderインスタンスのReadLineはファイルから1行の文字列を読み込み、戻り値にします。ファイルの終わりに達すると、Nothingを返すので、IsNothing関数でファイルの終わりかどうかを判定できます。SPrintもおもしろいことになっていますがまた今度です。
出力はこんな感じです。ここでは、自身のソースファイルを指定してみました。
Input filename: h:\\u.ab 1: #console 2: 3: Imports ActiveBasic 4: Imports ActiveBasic.Strings 5: Imports System 6: Imports System.IO 7: 8: Try 9: Print "Input filename: "; 10: Dim filename = Console.ReadLine 11: Dim sr = New StreamReader(filename) 12: Dim i = 1 As Long 13: Do 14: Dim s = sr.ReadLine 15: If IsNothing(s) Then 16: Exit Do 17: End If 18: s = s.Replace(Ex"\\t", " ") 19: Print SPrintf("%3d: %s", New Int32(i), s) 20: i++ 21: Loop 22: Catch e As Exception 23: Print "エラー:"; e.ToString(), Hex$(e.HResult) 24: End Try 25: 26: Console.ReadLine() 27: ExitProcess(0)
スポンサード リンク |
この記事のカテゴリ
- AB ⇒ AB5の解(ソリューション) —— Line Input # ——