pascalabcnet/Utils/LinesCount/LinesCount.pas
Бондарев Иван b59c654b24 bug fix
2015-06-12 20:59:28 +02:00

57 lines
1.7 KiB
ObjectPascal

// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
uses CRT,
System.IO;
var FilesCount,LinesCount:integer;
Size: longint;
function GetLinesCount(FileName: string):integer;
var sr: StreamReader;
begin
sr := new StreamReader(FileName, System.Text.Encoding.GetEncoding(1251));
while not sr.EndOfStream do begin
//if sr.ReadLine<>'' then
sr.ReadLine;
result := result + 1;
end;
sr.Close;
end;
function GetSize(FileName: string):longint;
var sr: StreamReader;
begin
sr := new StreamReader(FileName, System.Text.Encoding.GetEncoding(1251));
result := sr.BaseStream.Length;
sr.Close;
end;
procedure ScanDirectory(directory,mask: string);
var Files: array of FileInfo;
Dirs: array of DirectoryInfo;
DI: DirectoryInfo;
i: integer;
begin
DI := new DirectoryInfo(directory);
Files := DI.GetFiles(mask);
for i:=0 to Files.Length-1 do begin
LinesCount := LinesCount + GetLinesCount(Files[i].FullName);
FilesCount := FilesCount + 1;
Size := Size + GetSize(Files[i].FullName);
System.Console.CursorLeft := 0;
Write(string.Format('Files: {0}, lines: {1}, size {2}kb, lineSize {3}', FilesCount, LinesCount, (Size/1024):2:3, Size/LinesCount:3:1),' ');
end;
Dirs := DI.GetDirectories;
for i:=0 to Dirs.Length-1 do
if directory.ToLower <> Dirs[i].FullName.ToLower then
ScanDirectory(Dirs[i].FullName, mask);
end;
begin
if CommandLineArgs.Length=0 then begin
Writeln('linescount mask');
Exit;
end;
ScanDirectory(System.Environment.CurrentDirectory, CommandLineArgs[0]);
Writeln;
end.