Hier mal die Anzahl der Zeilen aus einer Datei in einer eigenen Funktion
Delphi-Quellcode:
function CountLines(aFileName:
string): Integer;
const
BUF_SIZE = 4096;
var
Buffer:
array[0..Pred(BUF_SIZE)]
of Byte;
Cnt: Integer;
FS: TFileStream;
begin
FS := TFileStream.Create(aFileName, fmOpenRead
or fmShareDenyWrite);
try
Result := 0;
repeat
Cnt := FS.
Read(Buffer[0], BUF_SIZE);
asm
// load data count
mov EAX, Cnt
dec EAX
js @@NoData
// no data
// load current line count
mov ECX, Result
// loop data buffer
@@LoopBuffer:
// compare byte in memory
cmp byte ptr[Buffer + EAX], $0A
jnz @@CheckDataLeft
// not a line break (#10)
// increment line count
inc ECX
// goto next byte
@@CheckDataLeft:
dec EAX
jns @@LoopBuffer
// return result
mov Result, ECX
@@NoData:
end;
until Cnt < BUF_SIZE;
finally
FS.Free;
end;
end;
Okay, ich gebe es, ich wollte mal wieder mit Assembler rumspielen
...
...