NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    에디터 엔지엠 매크로에서 Json 2차원 배열을 중복되지 않게 모두 조합하는 방법. (How to combination all non…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 우선, 현존하는 RPA 매크로 프로그램에서 Json 문자열을 파싱하고 2차원 배열로 만들어서 변수에 저장하는건 상당히 어려운 작업이라는걸 아셔야 합니다. 불가능한건 아니지만 많은 액션들을 사용해야하고, 스크립트가 복잡해집니다. 가장 좋은 방법은 업무에 맞게 일정 부분은 [ 커스텀 액션 ]으로 만들어서 사용하는건데요. 일회성 제작이라면 이 글을 참고하셔서 처리하는게 좋을겁니다. 엔지엠 매크로 에디터를 실행하고 새로운 스크립트를 추가하세요.

    cnOuw3h.gif

     

     

    우측 하단의 외부 API에 있는 [ C# 코드 실행 ] 액션을 스크립트에 추가하세요.

    5awtZnv.png

     

     

    이제부터는 C# 코딩을 좀 알아야 하는 부분이고, C# 코딩을 알더라도 중급 이상 실력을 갖춰야합니다. 아무래도, 2차원 배열을 중복 없는 순열(Permutation) 조합(Combination)해야 하기 때문입니다. 통계 관련쪽 개발을 하는게 아니라면... 사실 경력이 오래된 개발자라도 순열 조합이 뭔지 잘 모르거든요. 게임이나 통계 관련 분야의 솔루션을 만드는 분들은 코드를 쉽게 이해할 수 있을겁니다.

    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class Program
    {
        public string Main()
        {
            // 웹으로부터 Json Response 값
            string json = "[[1,2,3],[4,5,6,],[7,8,9]]";
    
            // Json 을 Parsing해서 배열로 변환
            var jArray = JArray.Parse(json);
    
            List<List<string>> list = new List<List<string>>();
            foreach (var item in jArray.Children())
                list.Add(item.Children().Select(s => s.Value<string>()).ToList());
    
            var result = CrossJoinLists(list);
            List<string> rtn = new List<string>();
    
            // 조합
            foreach (var r in result)
                rtn.Add(string.Join(",", r.ToArray()));
    
            // 조합 목록 구분
            return string.Join("@", rtn);
        }
    
        // 재귀 함수
        private static IEnumerable<List<T>> CrossJoinLists<T>(IEnumerable<List<T>> listofObjects)
        {
            var result = from obj in listofObjects.First()
                            select new List<T> { obj };
    
            for (var i = 1; i < listofObjects.Count(); i++)
            {
                var iLocal = i;
                result = from obj in result
                         from obj2 in listofObjects.ElementAt(iLocal)
                         select new List<T>(obj) { obj2 };
            }
    
            return result;
        }
    }

     

    이 코드를 실행하면, 정상적으로 C# 코드가 컴파일되지 않습니다. 기본적으로 엔지엠 매크로 시스템에서 제공하는 참조는 System 하나뿐입니다. 기본적인 내용들은 추가 처리없이 잘 동작합니다. 하지만, 이번 예제와같이 외부 라이브라리를 사용하는 경우 해당 라이브러리를 어셈블리 참조에 추가해야 합니다.

    Newtonsoft.Json.dll

    I9lOSic.png

     

     

    외부 라이브라리를 참조 추가하더라도 정상 동작하지 않을 수 있습니다. 해당 라이브러리가 엔지엠 매크로에 없기 때문입니다. 엔지엠 매크로 내부에 [ 시스템 파일 복사 ] 액션을 이용해서 "Newtonsoft.Json.dll" 파일을 복사해줘야 합니다. 이 라이브러리는 [ Json.NET ] 사이트에서 다운로드 받을 수 있습니다. 아래 그림과 같이 엔지엠 매크로 시스템의 Root에 원본 파일로 라이브러리를 선택해서 복사하세요.

    4Ma3F7J.png

     

     

    매크로를 실행하면 결과 값이 아래와 같이 만들어집니다. 그전에 소스 코드에서 클래스 이름메소드 이름을 설정하세요.

    1,4,7@1,4,8@1,4,9@1,5,7@1,5,8@1,5,9@1,6,7@1,6,8@1,6,9@2,4,7@2,4,8@2,4,9@2,5,7@2,5,8@2,5,9@2,6,7@2,6,8@2,6,9@3,4,7@3,4,8@3,4,9@3,5,7@3,5,8@3,5,9@3,6,7@3,6,8@3,6,9

    ZDOVhYZ.png

     

     

    [ 변수 ]를 추가한 후 아이디에 순열조합이라고 적어줍니다.

    kNoQr9V.png

     

     

    순열 조합된 결과 값을 변수에 추가해줍니다.

    gt6mMdt.png

     

     

    [ 문자열 분리 ] 액션을 추가한 후 변수로부터 문자열을 가져옵니다. 그리고, 분리자 속성에 @를 입력하세요.

    aweGXWc.png

     

     

    매크로를 실행하면 아래 2차원 배열이 순열 조합(Permutation Combination)된 배열로 만들어집니다. 

    [
      [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]
    ]

     

    배열은 총 27개입니다.

    DGQ1o8j.png

     

     

    매크로를 실행하면 아래 결과와 같이 배열이 만들어집니다.

    1,4,7
    1,4,8
    1,4,9
    1,5,7
    1,5,8
    1,5,9
    1,6,7
    1,6,8
    1,6,9
    2,4,7
    2,4,8
    2,4,9
    2,5,7
    2,5,8
    2,5,9
    2,6,7
    2,6,8
    2,6,9
    3,4,7
    3,4,8
    3,4,9
    3,5,7
    3,5,8
    3,5,9
    3,6,7
    3,6,8
    3,6,9

     

    중복된 조합을 만들려면 C# 코드에서 단순히 for를 이용하거나 반복 조합을 만드는 코드를 참고해보면 좋을듯 합니다. C# 코드를 설명하기 보다는 엔지엠 매크로에서 어떻게 복잡한 로직을 좀 더 쉽고 간결하게 사용할 수 있는지에 포커스를 맞춰서 글을 읽어보세요. 이 글은 초보자를 위한 코딩 설명이 아니기 때문입니다^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.