Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2009, 00:48   #1
Larkin.
Новичок
Джуниор
 
Регистрация: 14.06.2009
Сообщений: 4
По умолчанию Прошу написать комментарии к коду

Немогу разобраться в коде.
Задание такое, что: считываются строки из файла. При нажатии -> (ReadNextLine) в буфер записывается первая строка, при повторном нажатии - вторая строка и т.д. При нажатии <- в буфер записывается предыдущая строка (ReadPrevLine). Ну и выводится из буфера кнопкой "вывести". Препод жосткий, к каждой строчке придирается. Пожалуйста, напишите комментарии к коду.

Код:
unit Unit1;

interface

procedure OpenFile;
function ReadNextLine: string;
function ReadPrevLine: string;
function LengthA(S: string): integer;

var
 F: File;
  IsOpened: boolean;
  B1,B2: Array[0..255] of char;
   BS,sb: integer;
   BP: integer;
   lastnext: boolean;

implementation

{
 Процедура открытия файла.
}

procedure OpenFile;
begin
  AssignFile(F,'test.txt');
  Reset(F,1);
  IsOpened := true;
  BlockRead(F,B1,256,BS);
  BP := 0;
end;

{
 Функция возвращает следующую строку в файле.
}

function ReadNextLine: string;
var
  S: String;
  c1: char;
  i: integer;
begin
  if FilePos(F) >= FileSize(F) - 1 then
    if BS - BP < 2 then Exit;

  S := '';

  if not lastnext then
    repeat
      for i:= BP to BS-2 do
        if (B1[i] = #13) and (B1[i+1] = #10) then break;
      if BS - i > 2 then
        begin
          BP := i + 2;
          break; {repeat-until}
        end
      else
        begin  //буфер до конца, 0D0A не найден
          c1 := B1[i];
          BlockRead(F,B1,256,BS);
          if (c1 = #13) and (B1[0] = #10) then
            begin
              BP := 1;
              break; {repeat-until}
            end;
          BP := 0;
        end;
    until BS = 0; //пока конца файла не будет

  lastnext := true;

  if BS > BP then
    repeat
      for i:= BP to BS-2 do
        if (B1[i] <> #13) and (B1[i+1] <> #10) then S := S + B1[i]
          else break;
      if BS - i > 2 then
        begin
          sb := BP;
          BP := i + 2;
          break; {repeat-until}
        end
      else
        begin  //буфер до конца, 0D0A не найден
          c1 := B1[i];
          BlockRead(F,B1,256,BS);
          if (c1 = #13) and (B1[0] = #10) then
            begin
              SetLength(S,Length(S)-1);
              BP := 1;
              break; {repeat-until}
            end;
          S := S + c1;
          BP := 0;
        end;
    until BS = 0; //пока конца файла не будет
  result := S;
end;

{
 Функция возвращает предыдущую строку в файле.
}

function ReadPrevLine: string;
var
  S: String;
  c1: char;
  i: integer;
begin
  S := '';
  if lastnext then
  repeat
    if BP > 0 then BP := BP - 2;
    for i := BP downto 1 do
      if (B1[i-1] = #13) and (B1[i] = #10) then break;
      if (B1[i-1] = #13) and (B1[i] = #10) then
        begin
          BP := i - 1;
          break;
        end
      else
        begin
          c1 := B1[1];
          i := FilePos(F) - 512;
          if i < 0 then i := 0;
          Seek(F,i);
          BlockRead(F,B1,256,BS);
          BP := 255;
        end;
      if (FilePos(F) = 0) and (BP = 0) then break;
  until false;

  lastnext := false;
  repeat
    for i := BP-1 downto 2 do
      begin
        S := B1[i]+S;
        if (B1[i-2] = #13) and (B1[i-1] = #10) then break;
      end;
      if (B1[i-2] = #13) and (B1[i-1] = #10) then
        begin
          BP := i - 2;
          break;
        end
      else
        begin
          c1 := B1[0];
          if FilePos(F) = 256 then
            begin
              S := c1 + S;
              break;
              BP := 0;
            end;
          i := FilePos(F) - 512;
          if i < 0 then i := 0;
          Seek(F,i);
          BlockRead(F,B1,256,BS);
          BP := 255;
        end;
      if (FilePos(F) = 0) and (BP = 0) then break;
  until false;


  Result := S;
end;
Larkin. вне форума Ответить с цитированием
Старый 17.06.2009, 08:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пожалуйста, напишите комментарии к коду.
К каждой строчке? Это многовато будет...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2009, 15:15   #3
Larkin.
Новичок
Джуниор
 
Регистрация: 14.06.2009
Сообщений: 4
По умолчанию

хотябЫ ФУНКЦИЮ РИДНЕКСТЛАЙН
Larkin. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
комментарии к коду leahov Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 09.06.2009 13:09
Комментарии к коду ELL Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 09.03.2009 16:01
Комментарии к коду Juhn Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2007 20:29
Комментарии к коду Ярослав Помощь студентам 4 23.11.2007 16:57
Написать комментарии к коду. Delphi. Дарюха Помощь студентам 1 21.11.2007 16:05