source: trunk/Include/Classes/System/IO/TextReader.ab@ 435

Last change on this file since 435 was 432, checked in by イグトランス (egtra), 16 years ago

StreamReaderの完成。StringReaderの追加。
Consoleの追加(現在入力関係の一部のみ)。

File size: 2.2 KB
Line 
1NameSpace System
2NameSpace IO
3
4Class TextReader
5 Implements System.IDisposable
6
7Public
8'Protected
9 Sub TextReader()
10 End Sub
11Public
12 Virtual Sub ~TextReader()
13 Dispose(False)
14 End Sub
15
16' Static Null = StreamReader.Null As TextReader
17
18Public
19 Sub Close()
20 Dispose(True)
21 End Sub
22
23 Sub Dispose()
24 Dispose(True)
25 End Sub
26
27 Abstract Function Peek() As Long
28 Abstract Function Read() As Long
29 /*
30 @date 2008/02/26
31 @auther Egtra
32 */
33 Function Read(buffer As *StrChar, index As Long, count As Long) As Long
34 If buffer = 0 Then
35 ElseIf index < 0 Then
36 ElseIf count < 0 Then
37 End If
38 End Function
39
40 /*
41 @date 2008/02/26
42 @auther Egtra
43 @retval Nothing EOFに達しているとき
44 @retval 有効なStringインスタンス 読み取った1行
45 */
46 Virtual Function ReadLine() As String
47 If Peek() = -1 Then
48 Exit Function
49 End If
50 Dim sb = New Text.StringBuilder(256)
51 Do
52 Dim ch = Read()
53 If ch = &h0D Then
54 If Peek() = &h0A Then
55 Read() 'CR LFの場合
56 End If
57 Exit Do
58 End If
59 Select Case ch
60 Case -1 'EOF
61 Exit Do
62 Case &h0A 'LF
63 Exit Do
64 Case &h0B 'VT
65 Exit Do
66 Case &h0C 'FF
67 Exit Do
68 Case &h0D 'CR
69 Exit Do
70' Case &h85 'NEL
71' Exit Do
72' Case &h2028 'LS
73' Exit Do
74' Case &h2029 'PS
75' Exit Do
76 End Select
77 sb.Append(ch As StrChar) 'ToDo キャスト不要にすべきというチケットを書くこと
78 Loop
79 ReadLine = sb.ToString
80 End Function
81 /*
82 @date 2008/02/26
83 @auther Egtra
84 */
85 Virtual Function ReadToEnd() As String
86 Dim sb = New Text.StringBuilder(8192)
87 Do
88 Dim ch = Read()
89 If ch = -1 Then
90 ReadToEnd = sb.ToString
91 Exit Function
92 End If
93 sb.Append(ch As StrChar)
94 Loop
95 End Function
96
97Protected
98 Abstract Sub Dispose(disposing As Boolean)
99
100 /*
101 @date 2008/02/26
102 @auther Egtra
103 */
104 Virtual Function ReadImpl(buffer As *StrChar, index As Long, count As Long) As Long
105 Dim i As Long
106 Dim p = VarPtr(buffer[index])
107 For i = 0 To ELM(count)
108 Dim c = Read()
109 If c = -1 Then
110 ReadImpl = i - 1
111 Exit Function
112 Else
113 p[i] = c As StrChar
114 End If
115 Next
116 ReadImpl = i - 1
117 End Function
118End Class
119
120End NameSpace
121End NameSpace
Note: See TracBrowser for help on using the repository browser.