리스트 타입의 각 구성요소를 읽은 결과 역시 리스트

애플 오토메이션 사례 모음에서 오토메이션 공용환경 소개를 하면서 글로벌 변수를 저장할 수 있더라도 네임스페이스 개념이 없어서 서로 다른 여러 숏컷에서 사용하는 변수가 한 곳에 섞여 있으면 찾기 어렵다는 이야기를 했습니다. 그래서 텍스트 타입 변수에 숏컷 하나에서 사용하는 글로벌 변수를 JSON 모양으로 만들어 읽고 쓰는 딕셔너리 읽고쓰기 숏컷을 만들어 사용했는데 알고 보니 Toolbox Pro for Shortcuts 앱에서 처음부터 글로벌 변수를 JSON 모양으로 읽고 쓰는 기능을 지원하고 있었습니다. 다음부터 당연히 있을 법한 뭔가를 만들어야 할 때는 당연히 그 기능이 있을 거라는 가정을 하고 한번 더 찾아봐야겠다는 교훈을 얻었습니다.

그런데 이 JSON 읽고 쓰는 기능을 사용하다 보니 개행문자가 들어간 JSON을 제대로 처리하지 못하는 것 같습니다. 값에 개행문자가 들어 있으면 JSON 전체를 텍스트로 판정해 읽어올 수가 없었습니다. 전에 만들어 놨던 딕셔너리 읽고쓰기 숏컷을 다시 사용할지 잠깐 고민했지만 당연히 Toolbox Pro for Shortcuts 앱 기능이 훨씬 속도가 빨랐고 개행문자가 들어갈 상황을 회피해 가며 사용하기로 합니다. 아이디어는 JSON을 쓰기 전에 개행문자를 검사해 <br /> 모양으로 바꿔 기록했다가 읽어올 때 다시 개행문자로 바꿔 표시하는 겁니다. 그런데 리스트 타입을 개행문자를 포함한 텍스트로 바꾸려고 보니 뭔가 예상대로 동작하지 않았습니다.

그래프

결과

설명

그래프

결과

설명

 

출력 변수에 줄바꿈이 없는 텍스트가 들어가기를 원합니다.

 

List에 있는 각 항목을 위 출력에 한 줄로 넣고 싶습니다.

 

List의 각 항목마다 순회하며 출력에 텍스트를 합쳤습니다.

위 반복이 끝난 다음 찍어봤습니다. 의도하지 않은 줄바꿈이 들어가 있는 상로 보입니다.

줄바꿈 문자를 바꾸려고 시도해봤습니다. \n 문자를 매칭했는데 이게 아닌 모양입니다

의도는 리스트를 읽어 반복하며 출력 변수에 리스트의 각 요소를 합쳐 한 줄 짜리 텍스트로 만드는 겁니다. 하지만 출력 변수를 찍어 보니 의도하지 않은 개행문자가 들어 있는 것처럼 보였습니다. 그래서 개행문자를 찾아 바꿔 봤는데 여전히 동작하지 않는 것 같습니다. 이 상태로 JSON에 넣으면 오동작 하는 상황이어서 저 의도하지 않은 개행문자를 없앨 방법을 찾아야 했습니다.

그래프

결과

설명

그래프

결과

설명

 

위 문제 상황과 똑같이 시작합니다.

 

리스트 아이템을 반복하는 동안 Combine Text를 해도 결과가 원하는 텍스트 형식이 아니라 리스트 형식인 것 같아 빼버렸습니다. 빼도 결과는 같았습니다.

텍스트 형식으로 합쳐지기를 원하지만 이건 텍스트 형식이 아니라 여전히 리스트 형식인 것 같습니다.

리스트를 Cobine Text로 다시 합쳐봤더니 원하는 모양으로 합쳐졌습니다.

알고 보니 리스트 타입 변수의 각 요소를 순회하며 값을 읽어 이들을 다른 변수에 합치면 합쳐진 결과 역시 여전히 리스트 타입인 것 같았습니다. 출력 변수를 찍을 때 의도하지 않은 개행문자가 들어간 것처럼 보이는 이유는 이게 개행문자가 아니라 리스트 타입 변수를 화면에 찍으려 하자 리스트 각 구성요소를 출력할 때 개행문자로 구분한 것이기 때문입니다. 그래서 여전히 리스트 타입인 것으로 예상되는 출력 변수를 개행문자로 구분해 합쳐서 찍어 보니 이번에는 텍스트 타입으로 바뀌어 있었습니다.

그래프

결과

설명

그래프

결과

설명

반복할 것 없이 그냥 리스트를 Cobine Text에 넣었다 빼면 텍스트 형식으로 바뀌어 문자열 매칭을 할 수 있었습니다.

결국 리스트 각 구성요소를 순회할 필요도 없이 처음부터 Combine 노드를 사용해 리스트의 각 구성요소를 합치면 텍스트 타입이 되고 이 상태에서 개행문자를 치환하면 의도한 대로 동작합니다.

결론. 리스트 구성요소를 순회하며 값을 읽어 이들을 연결해도 연결한 결과가 여전히 리스트 타입이기 때문에 여기에 문자열 치환을 하려 해도 예상대로 동작하지 않습니다. 값을 찍어 보면 개행문자를 포함한 것처럼 보이지만 실은 리스트 타입을 화면에 표시할 때 개행문자를 포함해 표시할 뿐입니다. 문자열 치환을 하고 싶으면 리스트 타입에 Combine 노드를 사용해 타입을 바꾼 다음에 해야 합니다.