프로그래밍
[Delphi] 델파이 라이브러리 제공되지 않는 문자열 필터링 함수
고객이음
2023. 2. 12. 22:15
반응형
델파이 프로그래밍 하다 보면,
문자열 라이브러리에서 제공되지 않는 유익한 함수가 필요할 때가 있습니다.
아래 문자열 함수는 내가 항시 정의하고 사용하는 함수입니다.
필요하신 분은 별도로 함수 정의하시고 사용하시면 될 듯 합니다.
// 문자열 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;
반응형