Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как сделать код на delphi 7?


Автор: Alexey89 7.6.2021, 20:40
Как сделать код на delphi 7, который изначально был реализован в другой версии delphi (более новой)?
У меня delphi 7, в интернете нашел пример и мне нужно его переделать под delphi 7, как это сделать?
Код

function Test(var Buffer; BufferLen, Offset: Cardinal): Integer;
type
  TypeString = char;
var
  CurrentByte: TypeString;
  CurrentLen: Cardinal;
  SkipDoubleQuotes: Boolean;
begin
  SkipDoubleQuotes := false;
 
  CurrentLen := Offset;
  while CurrentLen <= BufferLen do
  begin
    CurrentByte := TArray<TypeString>(@Buffer)[CurrentLen];
    inc(CurrentLen);
 
    if SkipDoubleQuotes then
    begin
      case CurrentByte of
        '"', '''':
          begin
            if TArray<TypeString>(@Buffer)[CurrentLen - 2] = '\' then
              Continue;
 
            SkipDoubleQuotes := false;
          end;
      end;
    end
    else
      case CurrentByte of
        #9, #10, #13, #32:
          exit(CurrentLen);
        '"', '''':
          SkipDoubleQuotes := true;
      end;
  end;
  exit(-1);
end;


Вызов кода:
Код

var
  Str: PWideChar;
begin
  Str := '"T My \" " x'; // 11
 
  ShowMessage(Test(Str[0], Length(Str), 0).ToString);

Ошибка появляется в этой строке:
Код

 CurrentByte := TArray<TypeString>(@Buffer)[CurrentLen];

Так как delphi 7 не поддерживает коллекции, есть ли другой способ это сделать например заменить на обычный массив?

Автор: Seenkao 17.7.2021, 08:02
можешь попробовать просто String объявить, вместо TypeString.
что-то вроде:
Код

var
  CurrentByte: array[0..9] of String;    // либо динамический массив, но с ним работать надо array of String
  s: String;
...
// и в коде
  ...
  s := CurrentByte[CurrentLen];
  ...

Работать уже с "s".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)