Das funktioniert:
Code: Alles auswählen
Procedure.s BufferedStream_readLine(*this.BufferedStream, bufferSize.i = 1024)
Protected result.s, char.c, *r.Character, rLength.i, last13.c = #False
If (bufferSize < 1)
bufferSize = 1
EndIf
With *this
result = Space(bufferSize)
*r = @result
rLength = 0
Repeat
If (Not \readBlock(@char, SizeOf(Character)) = SizeOf(Character))
Break
EndIf
Select char
Case 0 ;String wurde mit 0 terminiert
Break
Case 10 ;LF wurde gelesen
If (last13)
*r - 1
EndIf
Break
Case 13 ;CR wurde gelesen, aber vielleicht kommt noch ein LF
last13 = #True
Default
last13 = #False
EndSelect
*r\c = char
*r + SizeOf(Character)
rLength + 1
If (rLength % bufferSize = 0)
result + Space(bufferSize)
*r = @result + rLength * SizeOf(Character)
EndIf
ForEver
*r\c = 0
EndWith
ProcedureReturn result
EndProcedure