티스토리 뷰

반응형

델파이 프로그래밍 하다 보면,

문자열 라이브러리에서 제공되지 않는 유익한 함수가 필요할 때가 있습니다.

 

아래 문자열 함수는 내가 항시 정의하고 사용하는 함수입니다.

필요하신 분은 별도로 함수 정의하시고 사용하시면 될 듯 합니다.


// 문자열  aSrcStr에서 서브문자열 aCutStr을 구분문자열로  xCnt만큼 이후 문자열을 반환함
// 예: 서울시 강남구 역삼동 1234 강남빌딩 3층 : 역삼동 이후문자열을 받고 싶을 때

// 문자열  aSrcStr에서 서브문자열 aCutStr을 구분문자열로  xCnt만큼 이후 문자열을 반환함
// 예: 서울시 강남구 역삼동 1234 강남빌딩 3층 : 역삼동 이후문자열을 받고 싶을 때
function SeperateString(aSrcStr, aCutStr:String; aCnt:Integer):String;
var
  xTemp : String;
  I : Integer;
begin
  // 기본 반환값 설정
  SeperateString := aSrcStr;

  if aSrcStr = '' then Exit;
  if aCutStr = '' then Exit;
  if aCnt < 1 then Exit;

  xTemp := aSrcStr;
  for I := 1 to aCnt do
  begin
    if Pos(aCutStr, xTemp) > 0 then
    begin
      xTemp := Trim(Copy(xTemp, Pos(aCutStr, xTemp), Length(xTemp)));
    end
    else
    begin
      SeperateString := xTemp;
      Exit;
    end;
  end;

  SeperateString := xTemp;

end;

 


// 스트링리스트 aStrList를 구분자 aDivS로 구반한 문자열로 반환
// 예 : 강남구,서초구

//---------------------------------------------------------------------------------------------------

// 스트링리스트 aStrList를 구분자 aDivS로 구반한 문자열로 반환

// 예 : 강남구,서초구
function GetCommaStrByStrList(aStrList: TStringList; aDivS: String): String;
var
  xIdx: Integer;
  xResult: String;
begin

  Result := '';
  if aStrList.Count = 0 then
    exit;

  try

    xResult := '';
    for xIdx := 0 to aStrList.Count - 1 do
      xResult := xResult + aDivS + aStrList[xIdx];

    xResult := Copy(xResult, Length(aDivS) + 1, MAXINT);

  except
  end;

  Result := xResult;

end;

// 문자열 aSrcStr에서 숫자만으로 추출된 문자열 반환
// ( 소숫점과 음수값을 포함)
// 예> 1234.56    -1234

//---------------------------------------------------------------------------------------------------
// 문자열 aSrcStr에서 숫자만으로 추출된 문자열 반환

// ( 소숫점과 음수값을 포함)

// 예> 1234.56    -1234

function GetNumberPlus(aSrcStr: String): String;
var
  xIdx    : Integer;
  xSrcStr : String;
  xResult : String;
begin

  xResult := '';
  xSrcStr := Trim(aSrcStr);
  if xSrcStr = '' then Exit;

  try
    for xIdx := 1 To Length(xSrcStr) do
      if ((xSrcStr[xIdx] >= '0') and (xSrcStr[xIdx] <= '9')) or (xSrcStr[xIdx] = '.') or (xSrcStr[xIdx] = '-') then
          xResult := xResult + xSrcStr[xIdx];
  except
  end;

  Result := xResult;

end;

 


// 문자열 aSrcStr에서 숫자만으로 추출된 문자열 반환.
// 예> 010-1234-1234  -  01012341234

//---------------------------------------------------------------------------------------------------

// 문자열 aSrcStr에서 숫자만으로 추출된 문자열 반환.

// 예> 010-1234-1234  -  01012341234
function GetNumber(aSrcStr: String): String;
var
  xIdx    : Integer;
  xSrcStr : String;
  xResult : String;
begin

  xResult := '';
  xSrcStr := Trim(aSrcStr);
  if xSrcStr = '' then Exit;

  try
    for xIdx := 1 To Length(xSrcStr) do
      if (xSrcStr[xIdx] >= '0') and (xSrcStr[xIdx] <= '9') then
        xResult := xResult + xSrcStr[xIdx];
  except
  end;

  Result := xResult;

end;

// 주민번호 유효검사

//---------------------------------------------------------------------------------------------------
// 주민번호 유효검사
function CheckJumin(aNo: string): Boolean;
const Weight: packed array[1..12] of Integer = (2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5);
var Loop, Sum, Rest: Integer;
begin
  if Length(aNo) <> 13 then Result := False
  else
  try
    Sum := 0;
    for Loop := 1 to 12 do
      Sum := Sum + StrToInt(aNo[Loop]) * Weight[Loop];
    Rest := 11 - (Sum mod 11);
    if Rest = 11 then Rest := 1;
    if Rest = 10 then Rest := 0;
    Result := Char(Rest + 48) = aNo[13];
  except
    Result := False;
  end;
end;

// 사업자등록번호 유효검사

//---------------------------------------------------------------------------------------------------
// 사업자등록번호 유효검사
function CheckSaUpJa(aNo: string): Boolean;
const Weight: packed array[1..8] of Integer = (1, 3, 7, 1, 3, 7, 1, 3);
var TempStr: string;
  Loop, Sum: Integer;
begin
  Result := True;
  Sum := 0;
  for Loop := 1 to 8 do
    Sum := Sum + StrToInt(aNo[Loop]) * Weight[Loop];
  Loop := StrToInt(aNo[9]) * 5;
  Sum := Sum + (Loop div 10) + (Loop mod 10);
  Sum := Sum mod 10;
  if Sum = 0 then TempStr := '0'
  else TempStr := IntToStr(10 - Sum);
  if TempStr <> aNo[10] then Result := False;
end;

// 전화번호에 대시(-) 무조건 생성
// 예>  01012341234 : 010-1234-1234

//---------------------------------------------------------------------------------------------------

// 전화번호에 대시(-) 무조건 생성

// 예>  01012341234 : 010-1234-1234

function GetTelNumByAddDash(const aSrcTel: String): String;
var
  TelNumber: String;
  s1, s2, s3: string;
  num: Integer;
begin
  TelNumber := StringReplace(Trim(aSrcTel), '-', '', [rfReplaceAll]);

  num := Length(TelNumber);

  if num = 9 then
  begin
    s1 := Copy(TelNumber, 1, 2);
    s2 := Copy(TelNumber, 3, 3);
    s3 := Copy(TelNumber, 6, 4);
  end
  else if num = 10 then
  begin
    if Copy(CID_TelNumber, 1, 2) = '02' then
    begin
      s1 := Copy(TelNumber, 1, 2);
      s2 := Copy(TelNumber, 3, 4);
      s3 := Copy(TelNumber, 7, 4);
    end
    else
    begin
      s1 := Copy(TelNumber, 1, 3);
      s2 := Copy(TelNumber, 4, 3);
      s3 := Copy(TelNumber, 7, 4);
    end;
  end
  else if num = 11 then
  begin
    s1 := Copy(TelNumber, 1, 3);
    s2 := Copy(TelNumber, 4, 4);
    s3 := Copy(TelNumber, 8, 4);
  end;

  if (num >= 9) and (num <= 11) then
    TelNumber := s1 + '-' + s2 + '-' + s3;

  GetTelNumByAddDash := TelNumber;

end;

 

반응형
댓글