FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird 팁&트릭
[32] SPLITTEXT - 문자열을 나누는 프로시저
박지훈.임프 [cbuilder] 6476 읽음    2006-12-05 14:02
입력 문자열을 특정 문자로 나누어서 결과셋으로 리턴해주는 프로시저입니다.
다음의 표준 UDF들을 선언해줘야 실행할 수 있습니다.
ASCII_CHAR
LTRIM
RTRIM
STRLEN
SUBSTR

출처 : http://www.fbtalk.net/ViewTopic.aspx?id=154

SET TERM ## ;

CREATE OR ALTER PROCEDURE SPLITTEXT 
(
  ipTEXT VARCHAR(32000), 
  ipSPLITCHARS VARCHAR(20),
  ipIGNORECHARS VARCHAR(20)
)
RETURNS
(
  opTEXT VARCHAR(500))
AS
  DECLARE VARIABLE vCurrChar VARCHAR(1);   
  DECLARE VARIABLE vIDX INTEGER; 
  DECLARE VARIABLE vLen INTEGER;
BEGIN 
  -- if the text is null/blank then exit 
  vLen = STRLEN(ipTEXT);

  IF (ipTEXT IS NULL OR ipTEXT = '') THEN 
  BEGIN 
    SUSPEND; 
    EXIT; 
  END 

  -- default to spaces and line sep if no split char defined
  IF ((ipSPLITCHARS IS NULL) OR (ipSPLITCHARS = '')) THEN 
    ipSPLITCHARS = ' ' || ASCII_CHAR(13) || ASCII_CHAR(10);

  IF (ipIGNORECHARS IS NULL) THEN
    ipIGNORECHARS = '';

  /* were starting with the first character and 
    on the first octet */ 
  vIDX = 1; 
  opTEXT = ''; 

  -- get the 1st char from the string   
  vCurrChar = CAST(SUBSTR(ipTEXT, :vIDX, :vIDX) AS VARCHAR(1)); 

  WHILE (vIDX <= vLen) DO 
  BEGIN 
    -- is it a seperator char? 
    IF (ipSPLITCHARS CONTAINING vCURRCHAR) THEN 
    BEGIN 
      opTEXT = RTRIM(LTRIM(opTEXT));

      -- return the current text, if there is any
      IF (opTEXT <> '') THEN
        SUSPEND; 

      -- reset the output buffer
      opTEXT = ''; 
    END ELSE 
    BEGIN
      IF ((vCurrChar <> '') AND (ipIGNORECHARS NOT CONTAINING vCurrChar)) THEN
        opTEXT = opTEXT || vCurrChar; 
    END
    -- increment the char index 
    vIDX = vIDX + 1; 
  
    -- get the Nth char from the string 
    vCurrChar = CAST(SUBSTR(ipTEXT, :vIDX, :vIDX) AS VARCHAR(1));     
  END
    
  -- if there is any text left then return it 
  IF (opTEXT <> '') THEN 
    SUSPEND;   

END ##

SET TERM ; ##

COMMIT;

+ -

관련 글 리스트
32 SPLITTEXT - 문자열을 나누는 프로시저 박지훈.임프 6476 2006/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.