BufferedStream.pbi (Include)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: BufferedStream.pbi (Include)

Beitrag von Demivec »

@NicTheQuick:Wenn der Puffer enthält {a, CR, CR, CR, b, CR, LF}, ReadLine () gibt {a, CR, b} anstelle von {a, CR, CR, CR, b}


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
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: BufferedStream.pbi (Include)

Beitrag von NicTheQuick »

Demivec hat geschrieben:@NicTheQuick:Wenn der Puffer enthält {a, CR, CR, CR, b, CR, LF}, ReadLine () gibt {a, CR, b} anstelle von {a, CR, CR, CR, b}
Danke, gute Idee. So genau hatte ich das noch gar nicht getestet. Das kommt dann im nächsten Update rein. Aktuell bin ich noch an einer weiteren Klasse dran, aber ich glaube noch einen Bug in PB gefunden zu haben. Ich tue mich nur noch schwer ein Beispiel daraus zu machen, was man gut als Bug-Report anbieten kann. /:->
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: BufferedStream.pbi (Include)

Beitrag von NicTheQuick »

Ich habe die "Klasse" mal modularisiert. Siehe erster Post.
Bild
Demivec
Beiträge: 49
Registriert: 22.02.2008 20:49
Wohnort: Utah, USA

Re: BufferedStream.pbi (Include)

Beitrag von Demivec »

NicTheQuick hat geschrieben:Ich habe die "Klasse" mal modularisiert. Siehe erster Post.
Wunderbar. :)

Eine kleine Korrektur:

Code: Alles auswählen

;=============================================== E X A M P L E ===============================================
CompilerIf #PB_Compiler_IsMainFile And #PB_Compiler_Thread
Bild
Antworten