새로운 글
새로운 덧글

델파이 프로젝트를 마이그레이션 시 컴포넌트 변경과 속성 변경 등 수작업 요소를 자동화 해 작업시간을 줄여줄 수 있는 reFind.exe 도구를 소개합니다.

reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구

reFind.exe(이하 reFind)는 정규표현식 패턴을 이용해 텍스트파일의 문자열을 찾아 바꿔주는 커맨드라인 도구입니다.


reFind는 델파이 소스코드(*.PAS)와 폼파일(*.dfm, *.fmx)의 속성과 유닛명을 일괄적으로 치환(replace)하거나 제거 할 수 있습니다.

특히, 마이그레이션 시 버전에 따라 변경된 속성명과 uses절의 유닛명을 정리해야 하는데요. reFind.exe를 이용하면 일일히 프로젝트를 열고 찾아서 손으로 수정하는 대신 프로젝트의 모든 소스와 폼파일을 대상으로 일괄 변경할 수 있어 마이그레이션 작업시간을 크게 줄여줍니다.

❑ reFind 사용법

reFind는 커맨드라인 도구이며, 명령프롬프트에서 사용할 수 있습니다.

reFind는 델파이 설치경로 하위의 bin 디렉토리에 델파이 설치 시 함께 설치됩니다. 해당 경로는 델파이 설치 시 윈도우 PATH에 등록되기 때문에 명령 프롬프트의 어떤 경로에서도 (reFind.exe 경로지정 없이)"reFind.exe" 명령어를 실행할 수 있습니다.


주요 실행인자

명령프롬프트에서 "reFind.exe /?"를 호출하면 사용법과 실행인자에 대한 도움말을 표시합니다. 그중 핵심 실행인자 몇개만 소개합니다.
  • <filemasks> : 치환작업 대상파일(파일마스크와 파일명)을 기입합니다.(예> "Source/*.pas Source/*.dfm" Source 경로 하위 모든 소스와 폼파일 대상)
  • /S - 하위 디렉토리를 모두 포함해 작업
  • /P:<검색패턴> - 검색패턴 기입
  • /R:<치환패턴> - 치환패턴 기입
  • /X:<패턴 규칙파일 경로> - 검색과 치환패턴이 여러줄로 입력된 패턴 규칙파일의 경로 지정
검색패턴(/P)과 치환패턴(/R) 그리고 패턴 규칙파일(/X)에 등록되는 패턴규칙은 PCRE(Perl호환 정규표현식)을 사용합니다.

reFind 사용법 예시

모든 PAS 파일에서 "TQuery"를 "TFDQuery"으로 일괄 변경

reFind.exe *.pas /I /W /P:TQuery /R:TFDQuery


모든 PAS와 DFM 파일에서 "TxxxQuery"를 "TFDQuery"로 일괄 변경

reFind.exe *.pas *.dfm /I /W "/P:T[A-Za-z]Query" /R:TFDQuery


Source 경로 하위 모든 디렉토리의 PAS와 DFM 파일을 대상으로 패턴파일에 등록된 패턴 적용

reFind.exe Source/*.pas Source/*.dfm /X:migration_pattern.txt


☞ 자세한 reFind.exe는 기술문서를 통해 확인할 수 있습니다.

❑ 패턴 규칙파일 포맷

 패턴 규칙파일은 여러 행으로 이뤄집니다. 각 행은 하나의 규칙을 나타냅니다. 패턴 규칙파일은 /X:<파일경로>를 사용해 지정할 수 있습니다.


찾기 및 바꾸기 규칙

<search pattern> -> <replace pattern>

<search pattern>을 <replace pattern>으로 대체합니다 이때 search, replace 모두 PCRE 패턴을 사용합니다.


uses절 제거 규칙

#unuse <unit name>

지정된 <unit name>을 PAS파일의 interface와 Implimentation 섹션의 uses절에서 제거합니다.


속성 제거 규칙

#remove <property name>

지정된 속성 이름(<property name>)을 PAS 파일과 DFM 파일에서 제거합니다. PAS 파일에서는 <속성> := <값>; 같은 구문이 모두 삭제됩니다.


전환 규칙

#migrate [<class> :] <old name> -> <new name> [, <unit>]

PAS 파일과 DFM 파일의 모든 <old name>을 <new name>으로 대체합니다. <class>가 지정된 경우 지정된 클래스 대상으로만 적용됩니다.

  • DFM 파일인 경우 - 상속된 객체가 아니라 기본 개체에만 적용됩니다.

  • PAS 파일인 경우 - with 절은 적용되지 않습니다.(<object>.<old name> 구문만 적용됩니다.)

<unit>이 지정된 경우 <old name>이 발견된 PAS파일의 uses 절에 <unit>이 추가됩니다. <unit>은 여러개를 쉼표로 구분할 수 있습니다.


패턴 규칙파일 예시

BDE를 FireDAC으로 마이그레이션하는 패턴 규칙파일의 일부입니다.

// uses 절에서 BDE 관련 유닛 제거

#unuse BDE.DBTables

#unuse BDE.BDEConst


// 사용하지 않는 속성 제거

#remove SessionName


// 속성 전환(, 뒤에 uses절에 추가할 유닛 등록)

#migrate Session.* -> FDManager.*, FireDAC.Comp.Client

#migrate DatabaseName -> ConnectionName


// 컴포넌트 교체(, 뒤에 uses절에 추가할 유닛 등록)

#migrate TSession -> TFDManager, FireDAC.Comp.Client

#migrate TDatabase -> TFDConnection, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Comp.Client

#migrate TTable -> TFDTable, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client

#migrate TQuery -> TFDQuery, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client


reFind.exe에 대해 알아봤습니다. reFind.exe의 사용법은 reFind.exe를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기를 통해 익혀보시기 바랍니다.
번호 제목 글쓴이 날짜 조회 수
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 3733
공지 이 달의 기술자료 & 기술레터 관리자 2017.02.06 729
공지 [프로그래밍 강의] 2018.8 ~ 2018.11 관리자 2015.01.22 6461
공지 RAD Studio(Delphi, C++Builder) 시작하기 관리자 2015.06.30 11503
공지 RAD 스튜디오로 개발된 모바일 앱 사례 (2018년 09월 업데이트 됨) 험프리 2014.01.16 148518
488 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 2682
487 [업데이트][XE7] iOS 8.1.3/8.2 서명과 프로비저닝 프로파일 지원 핫픽스(베타) Humphery 2015.04.14 905
486 파이어몽키에서 외부 라이브러리 연동하기(jar, so, a) [3] Humphery 2015.04.14 1957
485 [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기 [5] Humphery 2015.04.14 2487
484 [XE8] 네이티브 iOS 컨트롤 지원 Humphery 2015.04.13 666
483 [XE8] iOS 64bit 앱개발과 유니버설(armv7 + arm64) 앱개발 [1] Humphery 2015.04.13 1108
482 [XE8] Android 단말기 연결안될때 SDK 확인 및 설치 Humphery 2015.04.11 1593
» reFind.exe: 마이그레이션 작업에서 수작업을 줄여주는 도구 [3] Humphery 2015.04.09 2356
480 모바일 앱 라이프사이클 이벤트 처리하기 Humphery 2015.04.09 1017
479 모바일 앱 라이프 사이클 이벤트 처리하기(앱 완전 구동 후 실행하기) [1] Humphery 2015.04.09 647
478 웹에서 어플리케이션 구동하기(ActiveX 사용않고) Humphery 2015.04.09 1101
477 iOS 64bit 배포 시 ITMS-90092 오류 대응 [1] file Humphery 2015.04.09 1294
476 [무료 세미나] 초대합니다! RAD Studio XE8 출시 세미나!(서울&대구) 관리자 2015.04.08 3530
475 [FireDAC Skill Sprints] 8. TFDMemTable: 메모리 기반 데이터셋 사용하기 Humphery 2015.04.06 1091
474 [FireDAC Skill Sprints] 9. LocalSQL: DB에서 가져온 데이터(데이터셋)를 대상으로 다시 SQL쿼리 실행하기 Humphery 2015.04.01 1033
473 [FireDAC Skill Sprints] 7. FireDAC ETL: 데이터 내보내기, 가져오기 기능 구현하기 Humphery 2015.04.01 1325
472 [FireDAC Skill Sprints] 1. FireDAC 소개 험프리 2015.04.01 1072
471 [다음 버전 정보] 비콘(Beacon)으로 접근감지하기 Humphery 2015.03.26 2489
470 "모바일 앱" 개발 또는 유지관리, 데브기어와 해결하세요! file 관리자 2015.03.26 11914
469 최신 업데이트와 패치정보 확인하는 방법 file Humphery 2015.03.26 648


광고 모듈이 설치되어 있지 않아 실행을 중단합니다..