source: trunk/UTextFileStream.pas

Last change on this file was 2, checked in by george, 16 years ago

Přidáno: Ropracovaná verze 3.0

  • Property svn:executable set to *
File size: 1.7 KB
Line 
1// TTextFileStream class by Chronos 12.9.2005
2// Homepage: http://jirihajda.zdechov.net/
3
4unit UTextFileStream;
5
6interface
7
8uses Classes, Dialogs, SysUtils;
9
10type
11
12 TTextFileStream = class(TFileStream)
13 private
14 FBuffer: string;
15 protected
16
17 public
18 procedure WriteLn(Text: string);
19 function ReadLn: string;
20 function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
21 function RowsCount: Integer;
22 end;
23
24implementation
25
26{ TTextFileStream }
27
28function TTextFileStream.ReadLn: string;
29const
30 BufferLength = 10000;
31var
32 NewBuffer: string;
33 Readed: Integer;
34begin
35 Readed:= 1;
36 while (Pos(#13,FBuffer) = 0) and (Readed > 0) do begin
37 SetLength(NewBuffer, BufferLength+2);
38 Readed:= Read(NewBuffer[1], BufferLength);
39 SetLength(NewBuffer, Readed);
40 FBuffer:= FBuffer + NewBuffer;
41 end;
42 if Pos(#13,FBuffer)>0 then begin
43 Result:= Copy(FBuffer, 1, Pos(#13,FBuffer)-1);
44 Delete(FBuffer, 1, Pos(#13,FBuffer)+1);
45 end else begin
46 Result:= FBuffer;
47 FBuffer:= '';
48 end;
49end;
50
51function TTextFileStream.RowsCount: Integer;
52begin
53 Result:= 1;
54 FBuffer:= '';
55 Seek(0, soBeginning);
56 while ReadLn <> '' do Inc(Result);
57 Seek(0, soBeginning);
58end;
59
60function TTextFileStream.Seek(const Offset: Int64;
61 Origin: TSeekOrigin): Int64;
62begin
63 if Origin = soCurrent then Result:= inherited Seek(Offset - Length(FBuffer), Origin)
64 else Result:= inherited Seek(Offset, Origin);
65 FBuffer:= '';
66end;
67
68procedure TTextFileStream.WriteLn(Text: string);
69const
70 NewLine = #13#10;
71begin
72 Seek(0, soCurrent);
73 Write(Text[1], Length(Text));
74 Write(NewLine, 2);
75end;
76
77end.
78
Note: See TracBrowser for help on using the repository browser.