TLineStream klasse implementationContributor: MARTIN WALDENBURG {+ ------------------------------------- ------------------------------------- + | Klasse: TLineStream | Laget: 8,97 | Forfatter: Martin Waldenburg | Copyright 1997, alle rettigheter reservert. | Beskrivelse: TLineStream gir en bufret tilgang til linjene i afile. | Hver linje må slutte med CRLF. Ikke glem å skylle | Minnet etter skriftlig. | Versjon: 1.2 | Stat: Freeware | Ansvarsfraskrivelse: | Dette er gitt som er uttrykkelig uten noen form for garanti. | Du bruker den på egen RISC. + ----------------------------------------- --------------------------------- +} enhet mwLineStream; interfaceuses SysUtils, kurs -typen TLineStream = klasse (TFileStream) privat fLineStart: PChar; fMaxMemorySize: Longint; fMaxLineSize: Longint; fMemorySize: LongInt; fLineSize: Longint; fMemory: PChar; fLine: PChar; fFileEof: Boolean; fMemoryPos: LongInt; fEof: Boolean; funksjon GetMemoryFull: Boolean; Prosedyren SetMaxLineSize (NewValue: Longint); Prosedyren SetMaxMemorySize (NewValue: Longint); beskyttet offentlig konstruktør lage (Const Filename: string; Mode: Word); destructor ødelegge; styre; prosedyre FillMemory; funksjon Readline: PChar; Prosedyren Writeline (linjeskift: String); prosedyre FlushMemory; prosedyre Tilbake; Eiendommen MaxMemorySize: Longint lese fMaxMemorySize writeSetMaxMemorySize; Eiendommen MaxLineSize: Longint lese fMaxLineSize skrive SetMaxLineSize; Eiendommen Minne: PChar lese fMemory skrive fMemory; Eiendommen MemoryFull: Boolean lese GetMemoryFull; Eiendommen FileEof: Boolean lese fFileEof; Eiendommen eof: Boolean lese fEof skrive fEof; publisert slutten; {TLineStream} implementationconstructor TLineStream.create (Const Filename: string; Mode: Word); Var fHandle: Integer; begynne hvis ikke FileExists (Filnavn) da begynne fHandle: = FileCreate (Filename); FileClose (fHandle); slutt; arvet lage (Filename, Mode); fEof: = False; fFileEof: = False; MaxMemorySize: = 65535; fMemorySize: = 0; fMemoryPos: = 0; MaxLineSize: = 4096; Stilling: = 0; ende; {Skape} destructor TLineStream.destroy; begynne ReallocMem (fMemory, 0); ReallocMem (fLine, 0); arvet ødelegge; ende; {Ødelegge} prosedyre TLineStream.SetMaxMemorySize (NewValue: Longint); begynne fMaxMemorySize: = NewValue; ReallocMem (fMemory, fMaxMemorySize 1); end; {SetMaxMemorySize} prosedyre TLineStream.SetMaxLineSize (NewValue: Longint); begynne fMaxLineSize: = NewValue; ReallocMem (fLine, fMaxLineSize 1); end; {SetMaxLineSize} prosedyre TLineStream.FillMemory; Var readed: LongInt; begynne readed: = Read (fMemory ^, fMaxMemorySize); fMemorySize: = readed; hvis readed = 0, så fFileEof: = true; hvis fMemorySize > 0 deretter mens fMemory [fMemorySize -2] < > # 13 gjør DEC (fMemorySize); fMemory [fMemorySize]: = # 0; Stilling: = posisjon -Readed + fMemorySize 1; fLineStart: = fMemory; ende; {FillMemory} funksjon TLineStream.GetMemoryFull: Boolean; begynne hvis fMemorySize > 0 da Resultat: = True annet Resultat: = False; ende; {GetMemoryFull} funksjon TLineStream.ReadLine: PChar; Var Run: PChar; begynne if (fMemorySize = 0) og ikke FileEof deretter FillMemory; hvis fMemorySize > 0 da begynner Run: = fLineStart; mens Run ^ < > # 13 gjør inc (Run); fLineSize: = Run - fLineStart; inc (Run, 2); StrLCopy (fLine, fLineStart, fLineSize); fLine [fLineSize]: = # 0; Resultat: = fLine; fLineStart: = Run; Tilfellet Run ^ av # 0: FillMemory slutten; slutt; hvis fMemorySize = 0, så fEof: = True; ende; {Readline} prosedyre TLineStream.WriteLine (linjeskift: String); Var Count, Pos: Longint; begynne Newline: = Newline + # 13 # 10; Count: = Lengde (linjeskift); if (fMemoryPos > = 0) og (Count > = 0), og start Pos: = fMemoryPos + Count; hvis Pos > 0 da begynne hvis Pos > FMaxMemorySize deretter begynne FlushMemory; slutt; StrECopy ((fMemory + fMemoryPos), PChar (linjeskift)); fMemoryPos: = fMemoryPos + Count; fMemory [fMemoryPos]: = # 0; slutt; ende; ende; {Writeline} prosedyre TLineStream.FlushMemory; begynne Write (fMemory ^, fMemoryPos); fMemoryPos: = 0; end; {FlushMemory} prosedyre TLineStream.Reset; begynne fEof: = False; fFileEof: = False; fMemorySize: = 0; fMemoryPos: = 0; Stilling: = 0; ende; {Nullstill} slutt. Anmeldelser
Readstring bekker linje ved line
Previous:Windows avsluttes down
Next Page:Innholdet i RAR file