데이터 처리(munipulation)라는 것은 데이터의 사용을 편리하게 하고 관리할 수 있는 기능을 향상시키기 위해 선언, 구조화, 포메팅, 정렬하는 과정을 의미한다.
데이터 처리를 공부하려면 객체, 메소드, 속성에 대한 구분을 할 수 있어야 한다.
문자열(String)이란 어떤 택스트를 다루는 데이터 타입이다. 자동화를 개발하는 동안 문자열은 매우 잦게 사용되므로 반드시 알아야 한다.
UIPath에서는 VB.Net에 있는 String 메소드를 빌려와 사용한다. 자주 사용되는 String 메소드는 아래와 같다.
메소드 | 설명 | 사용 예시 | output 데이터 타입 |
---|---|---|---|
String.Concat | 두 문자열 객체를 받아 합침 | String.Concat(VarName1, VarName2) | String |
Contains | 특정 문자열이 푸함되어있는지 확인 | VarName.Contains("text") | Boolean |
String.Format | 문자열 객체의 값을 변경함(혹은 원하는 자리에 텍스를 집어넣음), python의 string.format 과 동일 | String.Format("{0} is {1}",VarName1, VarName2) | String |
IndexOf | 문자열에서 입력받은 문자열이 처음으로 나오는 위치의 인덱스를 반환(0부터 작하는 인덱스), 입력받은 문자열은 유니코드로 변환하여 비교함 | VarName1.IndexOf("a") | Int32 |
LasgIndexOf | IndexOf 메소드를 뒤에서부터 조회함 | VarName1.LastIndexOf("a") | Int32 |
String.Join | 컬렉션 내의 요소들을 입력받은 텍스트로 이어붙여 하나의 문자열로 반환함, python의 str.join(list) 와 동일 | String.Join(" | ", ColVarName1) |
Repalce | 특정 문자열을 다른 문자열로 전부 대체 | VarName.Replace("original", "replaced") | String |
Split | 문자열을 입력받은 인덱스(위치)에 입력받은 텍스트로 나눔 | VarName.Split(" | ")(index) |
Substring | 문자열을 시작지점부터 입력받은 글자수 만큼 추출 | VarName1.Substring(startindex, length) | String |
더 많은 메소드는 다음 링크에서 추가로 확인할 수 있음 https://alin-j-alin.tistory.com/13
정규표현식(Regular Expression = REGEX = regexp)은 문자열을 다룰 때 원하는 패턴에 일치하는 문자열을 조회하는 데에 특화된 방법이다.(근데 사용법이 좀 어려움)
UIPath에서는 정규표현식과 비슷한 RegEx builder를 제공한다. RegEx은 입력 데이터에 대한 유효성 검사, 문자열 파싱, 데이터 스크래핑 및 처리(manipulation)에 사용된다.
RegEx builder는 RegExBuilder Wizard 기능이 있어 조금 더 편리하고 빠른 정규표현식 사용이 가능하다.(Matches 액티비티를 사용해보면 알 수 있음)
아래는 RegEx Builder를 지원하는 액티비티들이다.
액티비티 | 설명 | output 데이터 타입 |
---|---|---|
Matches | 입력된 문자열의 모든 부분을 검사해 패턴과 일치한 것들을 전부 반환 | System.Collections.Generic.IEnumerable<System.Text.RegularExpressions.Match> |
IsMatches | 입력된 정규표현식이 문자열에 일치하는지 여부 판단 | Boolean |
Replace | 정규표현식 패턴과 일치하는 문자열을 입력받은 문자열로 대체 | String |
※ 주의! 현재 UIPath Academy와 UIPath Studio의 액티비티 이름이 맞지 않음을 확인했음(아래 참고)
Matches → Find Matching Patterns
IsMatches → Is Text Matching
Replace → Replace Matching Patterns
이메일을 추출하는 프로세스를 만드는데, 정규표현식을 사용하지 않고 구현해보자. 입력 데이터는 아래와 같다.(이메일을 임의로 하나 더 추가함)
"Please use the following address to contact me john.doe@localcompany.com, it's the company email rlawldn@naver.com"
input 데이터와 결과를 담을 리스트 생성
이메일이 여러 개 나올 수도 있기 때문에 검출된 이메일은 리스트에 넣어 관리한다. 이를 위해 Creat List 액티비티를 사용했다.
공백을 기준으로 나눠주기
공백을 기준으로 각 문자열을 나눠준다. 이메일은 중간에 띄어쓰기가 없으므로 가능한 방법이다.
반복을 돌며 각 엘리먼트가 이메일 형태인지 확인
위에서 나눈 문자열들을 하나씩 돌면서 @와 .이 있는지 확인한다. 이메일이라 함은 어떤 경우던 @와 .을 포함하고 있기 때문이고, 일반적으로 이메일을 제외하고는 @와 .을 붙여서 쓰는 경우는 없기 때문에 조건으로 사용이 가능하다. @와 .이 있는지 여부는 b_Contain 변수에 Boolean 타입으로 저장된다.
조건에 부합하면 리스트에 추가
@와 .이 있다면(b_Contain이 True라면) 리스트에 해당 문자열을 추가한다. 이를 위해 Append Item to List 액티비티를 사용했다.
리스트의 엘리먼트를 한 줄로 출력
문자열 메소드 중 join을 사용해 저장되어있는 이메일들을 한 줄로 출력한다.
이메일을 추출하는 프로세스를 만드는데, 이번에는 정규표현식을 사용해보자. 입력받는 텍스트는 텍스트 파일로 받는다.
텍스트 데이터 읽기, 텍스트 데이터 split, 결과를 담을 리스트 생성
이번에는 텍스트 파일로 input text가 제공되었기 때문에 Read Text File 액티비티로 텍스트를 읽어온다. 읽어온 텍스트를 개행으로 split 한다. Visual Basic에서 개행은 vbCrLf로 쓴다. 그리고 과제 1과 마찬가지로 이메일이 여러 개가 올 수 있기 때문에 이메일은 리스트에 담아 관리한다.
반복문, 이메일 판단
개행으로 나눈 리스트를 엘리먼트마다 돌면서 이메일인지 판단한다. 판단 기준은 @와 .이 있는지 여부이다. 만약 @와 .이 있다면 다음 동작을 수행한다.
정규표현식으로 이메일 검출, 리스트 추가
정규표현식으로 해당 텍스트에서 이메일을 검출한다.(액티비티 이름이 Find Matching Patterns로 바뀌었음을 주의) 검출된 이메일은 이메일 리스트에 담는다.
출력
리스트를 한 줄로 출력한다.
사용자로부터 이름, 성, 일자를 받아 포멧팅을 한다. 원하는 스크립트는 아래와 같다.
"안녕하세요. <last_name><first_name>님, 다음 주 <day_of_week> 제품 출시 행사에 여러분을 초대하고 싶습니다. 이번 주 말까지 확인 부탁드립니다."
사용자 입력
사용자에게 입력받는 성과 이름은 Null값이면 안된다. 이를 방지하기 위해 Do while의 조건으로 입력받은 문자열이 Null인지 여부를 넣는다. 요일은 드롭다운에서 하나를 선택하는 것으로 한다.
텍스트 대치
스크립트에 Replace 메서드를 사용해 포멧팅 할 준비를 한다. 아래와 같이 성, 이름, 요일을 전부 바꿔준다.
출력
String.Format 메서드를 사용해 입력받은 성, 이름, 요일을 넣어 출력한다.