delphi XE7 배열 작업에서 누락된find(POS) 기능

1736 단어 Delphi
delphi xe7에서는 유사한 문자열 처리 기능을 추가한 것과 같은 그룹 조작을 많이 확장했다.
예를 들어, 배열 더하기
var
  A: array of integer;
  B: TBytes = [1,2,3,4]; //Initialization can be done from declaration
begin
  ...
  A:=[1,2,3]; // assignation using constant array
  A:=A+[4,5]; // addition - A will become [1,2,3,4,5]
  ...
end;

배열 삽입
var
  A: array of integer;
begin
  ...
  A:=[1,2,3,4];
  Insert(5,A,2); // A will become [1,2,5,3,4]
  ...
end;

배열 삭제
var
  A: array of integer;
begin
  ...
  A:=[1,2,3,4];
  Delete(A,1,2); //A will become [1,4]
  ...
end;

배열 연결
 A := Concat([1,2,3],[4,5,6]); //A will become [1,2,3,4,5,6]

왜xe7에서 수조에 대해 이렇게 큰 변화를 해야 하는가. 물론 먼저 수조 프로그래밍을 편리하게 해야 한다. 사실 더욱 깊은 원인은 ansistring이 모바일 플랫폼에서 부족하기 때문이다.
많은 과거의 코드들이 byte를 ansichar로 처리했기 때문에 모바일 플랫폼에 도착하면 이 코드들은 모두 도망가지 못한다.그리고 개조하기 어려워요.
그럼 Tbytes에서 전통적인 ansistring을 교체하는 것만 사용하세요.그래서 이 전통적인 문제를 해결하기 위해 수조 조작에 이렇게 많은 방법을 추가했다.
그러면 지금 문제가 생겼다. 전통적인pos기능이 들어가지 않아서 많은pos를 사용하는 조작은 개조할 수 없다.
모르다안에 가입?현재의 임시적인 방법은 스스로 이 문제를 해결하기 위해find(pos) 함수를 만드는 것이다.
이후pos와 충돌하지 않기 위해 함수 이름은find라고 하는데, 기능은 한 수조에서 다른 수조를 찾아 위치를 되돌려주는 것이다.
function Find(const sub, Buffer:TBytes): Integer;
var
  N: Integer;
begin


  N := Length(sub);
  if N>0 then
    for Result := low(Buffer) to high(Buffer)-(N-1) do
      if CompareMem(@Buffer[Result], sub, N) then
        exit;
  Result := -1;
end;

이렇게 하면 이걸로 원래의 ansistring의pos 조작을 바꿀 수 있다.

좋은 웹페이지 즐겨찾기