Danke für den Code! Heute ist der Tag für Fingerübungen!
Mit deiner Funktion kriege ich aber bei der angehängten Textdatei einen Wert von 1,00, mit meiner Funktion (inkl. Berichtigungen) einen Wert von 9,21!
Hier ist nochmals meine berichtigte Funktion:
Delphi-Quellcode:
function MyGetAverageWordLengthFromFile(
const sFile: TFileName; MaxBytesToRead: Integer;
const WordBoundaries:
string = '
' + #13 + #10): Single;
var
fs: TFileStream;
ReadByte: Integer;
SpacesCount, WordChars: Integer;
ThisByte: Byte;
SpaceRead, WordRead: Boolean;
begin
Result := -1;
fs := TFileStream.Create(sFile, fmOpenRead
or fmShareDenyNone);
try
if MaxBytesToRead > fs.Size
then
MaxBytesToRead := fs.Size;
SpacesCount := 0;
WordChars := 0;
SpaceRead := False;
WordRead := False;
for ReadByte := 1
to MaxBytesToRead
do
begin
fs.
Read(ThisByte, 1);
//CodeSite.Send('ThisByte', IntToStr(ThisByte) + ' ' + Chr(ThisByte));
//if ThisByte = 32 then
//if Chr(ThisByte) in WordBoundaries then
if Pos(Chr(ThisByte), WordBoundaries) > 0
then
begin
if WordRead
then
begin
if not SpaceRead
then
Inc(SpacesCount);
SpaceRead := True;
end;
if ReadByte = MaxBytesToRead
then
Dec(SpacesCount);
end
else
begin
WordRead := True;
SpaceRead := False;
Inc(WordChars);
end;
end;
//CodeSite.Send('SpacesCount', SpacesCount);
if SpacesCount <> -1
then
Result := WordChars / (SpacesCount + 1);
finally
FreeAndNil(fs);
end;
end;