본문 바로가기

RPA

[UiPath] iterator에서 원하는 값 찾기

iterator에서 원하는 값을 찾는 방법은 다양하다.
(사실 다양하다고 했지만 당장 생각나는 방법은 두개뿐이다 ㅎㅎ)

for문안에 if를 넣어서 찾아도 되고 Where를 사용해서 찾아도 된다.
for로 찾는건 쉬우니 Where로 찾는 것을 포스팅해볼 예정이다~~

 

특정 Path에 내가 원하는 파일이 있느냐 할 때 상당히 많이 쓰여서 Path 파일들 중 원하는 파일 찾기를 할 것이다.

 

변수 선언

strPath = "파일을 찾고자 하는 Path"
arrPathFiles = Directory.GetFiles(strPath)

우선 Path와 Path안의 파일을 변수로 받아왔다.
arrPathFiles는 String의 1차배열로 Path안의 디렉토리는 제외하고 모든 파일을 가져온다.
(임시파일도 가져오며 오늘 글을 쓰게 된 계기다)

값을 찾기 위해 Where를 사용할 것이다.
arrPathFiles 중에서 test가 포함된 파일명을 가진 파일을 가져오려고 한다.

arrPathFiles.Where(Function(x) x.Contains("test")) 까지만 입력하면 iterator로 반환된다.

여기서 arrPathFiles.Where(Function(x) x.Contains("test"))(0) 으로 인덱스를 지정해주면
test가 포함된 파일들 중 제일 처음 파일을 가져올 수 있다.
하지만 문제는 test가 포함된 파일이 하나도 없다면 오류가 날 것이다.

 

(좌) First / (우) FirstOrDefault

그럴 때는 .FirstOrDefault를 사용하면 된다. 
arrPathFiles.Where(Function(x)
 x.Contains("test")).FirstOrDefault 

First와 FirstOrDefault의 가장 큰 차이점은 가져올 값이 없을 때(iterator가 비어있을 때)
First는 오류가 나고 FirstOrDefault는 빈 값을 반환한다.
필요에 따라 알아서 쓰면 될 듯! (Last와 LastOrDefault도 있다!)

 

아무튼 이렇게 하면 iterator에서 원하는 값을 찾을 수 있다

오늘 글을 쓰게 된 계기가 임시파일 때문인데...
RPA에서 엑셀파일을 참 많이 사용하는데 임시파일이 작업을 종종 방해한다!
임시파일은 ~$로 시작하는 파일이다.

아래가 임시파일

아이콘도 희여멀겋고.. ~$가 파일 앞머리에 붙어있는 파일인데
말그대로 임시파일이라 숨김파일을 안보이게 하면 윈도우 탐색기에 보이지도 않는다.

문제는.. RPA로 작업할 때인데 Directory.GetFiles를 하게 되면 임시파일도 몽창 가지고 온다.
위에서 처럼 arrPathFiles.Where(Function(x) x.Contains(".xlsx")).FirstOrDefault  를 하게 되면 엉뚱한 임시파일을 가져와서 작업하려고 하는 상황이 펼쳐지기도 한다...

 

아무튼 나는 평소에 임시파일 때문에 아래처럼 사용하는 편인데.. arrPathFiles.Where(Function(x) x.Contains("test") And x.Contains("~$")=False).FirstOrDefault

운영중인 과제가 잘 수행되고 있나 모니터링을 위해 원격 접속해서 확인해보니 시작한지 10분도 안돼서 오류가 나 멈춰있는 상황이었다.

소스를 뜯어보니 Not Contains("~") 로 임시파일에 대한 처리도 잘 되어있는데 왜 그랬는지 한참을 들여다봤다.
원인은 파일명에 "~"가 들어가는 탓이었다.... ㄱ-

 

일단 나는 ~$로 변경해서 수정한 상태고... 
Not Contains("~") 보단 Contains("~$")=False 혹은 
arrPathFiles.Where(Function(x) x.First="~").FirstOrDefault 처럼 First를 사용하는 것이 좋을 것 같다!

 

끔찍하다..

이렇게 오류처리를 해도..
파일명으로 ~를 맨 처음에 쓸 수 있고 ~$도 파일명으로 쓸 수 있기때문에.. 불안하다.. 사람은 늘...

임시파일은 처리해주지 않으면 종종 오류를 발생시켜서.. 사람을 열받게 한다...
꼭 처리하여 열받는 일이 없도록 합시다,,

 

오늘의 포스팅 끝!

'RPA' 카테고리의 다른 글

[Zapier] zapier 알아보기  (0) 2021.11.16
[UiPath] String.Format 사용하기  (0) 2021.07.23
[UiPath] Chrome Alert Selector  (0) 2021.04.08
[UiPath] 파일 크기 구하기  (2) 2021.02.08
[UiPath] DataTable에 이상한 값(-214..)이 나올 때  (0) 2021.01.12