2015년 2월 11일 수요일

Lua Script 기준 스트링 검색/추출/분리(Find/SubString/Split)

오늘 포스팅 할 내용은 Lua Script 환경에서 스트링 검색/추출/분리 작업에 대해서 이야기 합니다.

프로그램을 만들다 보면 스트링 핸들링은 중요한 항목중에 하나이고 뭐 대충 검색 해보면 많은곳에서 가이드 하고 있습니다.

그래도 샘플을 찾다 보면 내가 제시한 샘플을 찾고 자 하는 사람들을 위해서 ^^

일단 선행 조건은 특정 디렉토리에 파일이 있을경우 파일명만 찾아서 추출하고 과정과 디렉토리 를 "\\" 문자로 분리 하는 과정을

소개 합니다.

strOrgPath = "C:\\Temp\\Dummy.txt";
strOnlyFileName = "";

// 파일을 분리 하기 위한 Reverse Find
// 루아는 뒤에서 부터 찾는 함수가 없어서 문자열을 돌리고 찾는 로직으로 처리함.
nPos = strOrgPath:reverse():find("\\")

// 파일 이름 분리 작업
sOnlyFileName = string.sub(strOrgPath, string.len(strOrgPath)-(nPos-string.len("\\")-1), string.len(strOrgPath))
print ("[" .. sOnlyFileName .. "]")


//디렉토리를 "\\" 로 분리 하는 작업
Lua 는 스트링 분리 하는 함수가 별도로 없으므로
디렉토리를 "\\" 로 분리 하는 작업은 별도 함수로 제작하여 Lua Table 로 리턴하여 처리 되는 구조로 설명합니다.

//스트링 분리 함수.
function SplitString(str, pat)
   local t = {}
   local fpat = "(.-)" .. pat
   local last_end = 1
   local s, e, cap = str:find(fpat, 1)

   while s do
      if s ~= 1 or cap ~= "" then
         table.insert(t,cap)
      end
     last_end = e+1
     s, e, cap = str:find(fpat, last_end)
   end

   if last_end <= #str then
      cap = str:sub(last_end)
      table.insert(t, cap)
   end

   return t
end

// 실제 사용방법
parsetbl = SplitString(strOrgPath, "\\")

for i, v in pairs(parsetbl)
do
    print ("Key = " .. i .. " Value = " .. v)
end

여기까지 ^^;

댓글 없음: