Оглавление Free Pascal: Подсчет числа строк в текстовом файле


Текст программы с комментариями

В тексте программы специфичным для FPC являются только директивы условной компиляции:
{$ifdef tp}
     count : word;
     i,z   : integer;
{$else}
     count,i,z : longint;
{$endif}
Однако можно обойтись и без них, выбрав подходяший вариант.

---- Текст программы: ----
program count_lines;
{
  Программа подсчитывает число строк в файле.
  Из библиотеки RunTime FreePascal, модифицирована
}

 uses dos,crt;

  type td = array[1..10000] of byte;

  var
     lines : longint;
     s : searchrec;
     f : file;
     d : ^td;
{$ifdef tp}
     count : word;
     i,z   : integer;
{$else}
     count,i,z : longint;
{$endif}

  begin
     lines:=0; 
     new(d); // Выделяется память для массива 10000 байт.
     if paramcount<1 then // если число параметров при запуске меньше 1
       begin
          writeln('Usage: ',paramstr(0),' filename.ext [filename.ext] ...');
          writeln('  Multiple File Names and Wild Cards Allowed:');
          writeln('  Example: lines *.cpp stdio.h *.asm');
          halt(1); // Выход в систему с кодом возврата = 1 
       end;
     for i:=1 to paramcount do
       begin
          findfirst(paramstr(i),archive,s); // найти первый файл, соответствующий
                                            // шаблону paramstr(i), инфу поместить в s   
          while (doserror=0) do
            begin
               write('Scanning: ',s.name); // напечатать Scanning: и имя файла
               assign(f,s.name);    // "соединить" файл с файловой переменной f
               reset(f,1);          // Файловый указатель поставить на начало файла 
               while not(eof(f)) do // цикл - пока не достигнут конец файла
                 begin
                    blockread(f,d^,10000,count); // пытаться читать из файла в буфер d^
                                                 // 10000 байт. Фактически прочтено count  
                    for z:=1 to count do         // сканировать прочтенные count байт
                      if d^[z]=10 then inc(lines); // если очередной байт есть переход на
                                                 // новую строку, то увеличить lines на 1.
                 end;
               writeln(' ',lines+1,' lines');   // печатаю число строк в файле
               lines:=0;                        // обнуляю lines, чтобы обработать след. файл  
               close(f);               // закрываю файл.
               findnext(s);            // ищу следующий файл,соответствующий шаблону paramstr(i)
            end;
       end;
     dispose(d);          // освобождаю память, выделенную для массива 10000 байт
     write('Press Enter to exit');
     readln; // ожидаю нажатия клавиши Enter
  end.
После замены директив условной компиляции на:
count : word;
i,z : integer;

успешно компилировал программу в Turbo pas7.

Опции (настройка) компилятора FPC

Компилятор FPC, как и Турбо7 и Делфи может настраиваться. Однако настройки, включенные по умолчанию, как обычно, подходят в большинстве случаев, так что пользователь и не вспоминает о них. Но если нам, например, желательно, чтобы компилятор сообщал не только об ошибках, но и выдавал предупреждения о сомнительных конструкциях, используем опцию:
-vwh
где w - предупреждения (warnings), h - подсказки (hints).

Создадим файл fpc.cfg, в котором запишем -vwh и поместим его в папку prob, где находится файл lines.pp. Туда же поместим файл для вызова компилятора lin.cmd (или lin.bat), в котором запишем:
E:\FPC2.0.4\bin\i386-win32\fpc.exe lines.pp
Теперь для компиляции достаточно запустить (открыть) файл lin.cmd. Чтобы видеть сообщения компилятора, нужно делать это в режиме сеанса DOS. Рассмотрим для примера еще несколько настроек.

Опции чувствительны к регистру (заглавные/строчные). Полный список настроек можно найти в документации (eng): руководство пользователя гл 5, руководство программиста гл 1 или (перевод) на сайте http://www.freepascal.ru/wiki/
Rambler's Top100
Hosted by uCoz