NameSpace System NameSpace IO Class TextReader Implements System.IDisposable Public 'Protected Sub TextReader() End Sub Public Virtual Sub ~TextReader() Dispose(False) End Sub ' Static Null = StreamReader.Null As TextReader Public Sub Close() Dispose(True) End Sub Sub Dispose() Dispose(True) End Sub Abstract Function Peek() As Long Abstract Function Read() As Long /* @date 2008/02/26 @auther Egtra */ Function Read(buffer As *StrChar, index As Long, count As Long) As Long If buffer = 0 Then ElseIf index < 0 Then ElseIf count < 0 Then End If End Function /* @date 2008/02/26 @auther Egtra @retval Nothing EOFに達しているとき @retval 有効なStringインスタンス 読み取った1行 */ Virtual Function ReadLine() As String If Peek() = -1 Then Exit Function End If Dim sb = New Text.StringBuilder(256) Do Dim ch = Read() If ch = &h0D Then If Peek() = &h0A Then Read() 'CR LFの場合 End If Exit Do End If Select Case ch Case -1 'EOF Exit Do Case &h0A 'LF Exit Do Case &h0B 'VT Exit Do Case &h0C 'FF Exit Do Case &h0D 'CR Exit Do ' Case &h85 'NEL ' Exit Do ' Case &h2028 'LS ' Exit Do ' Case &h2029 'PS ' Exit Do End Select sb.Append(ch As StrChar) 'ToDo キャスト不要にすべきというチケットを書くこと Loop ReadLine = sb.ToString End Function /* @date 2008/02/26 @auther Egtra */ Virtual Function ReadToEnd() As String Dim sb = New Text.StringBuilder(8192) Do Dim ch = Read() If ch = -1 Then ReadToEnd = sb.ToString Exit Function End If sb.Append(ch As StrChar) Loop End Function Protected Abstract Sub Dispose(disposing As Boolean) /* @date 2008/02/26 @auther Egtra */ Virtual Function ReadImpl(buffer As *StrChar, index As Long, count As Long) As Long Dim i As Long Dim p = VarPtr(buffer[index]) For i = 0 To ELM(count) Dim c = Read() If c = -1 Then ReadImpl = i - 1 Exit Function Else p[i] = c As StrChar End If Next ReadImpl = i - 1 End Function End Class End NameSpace End NameSpace