NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET 매크로 프로그램 만들기. (문자열 연결)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 오늘은 문자열 연결 액션을 만들어 볼건데요. 프로그래밍 코딩에서는 간단하게 처리할 수 있지만, GUI를 제공하는 매크로 프로그램의 경우 이것저것 신경써야 할 것들이 많습니다. 그래도 다른 액션들에 비하면 많이 쉬운 편이죠^^;

     

    문자열 연결 액션은 Expression 폴더에 추가했습니다. 뭔가 처리 후 결과를 내는 액션들은 모두 여기에서 작업할겁니다.

    tLfEvDN.jpeg

     

     

    속성은 2개뿐입니다. 간단하죠? 변수로부터 처리하기 위해 Variables 목록과 문자를 연결할 때 자동으로 구분자를 처리하기 위한 Separator가 있습니다.

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("VariableList")]
    [LocalizedDescription("VariableList")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string[]? Variables { get; set; }
    
    [LocalizedCategory("Action")]
    [LocalizedDisplayName("Separator")]
    [LocalizedDescription("Separator")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string? Separator { get; set; }

     

    액션 처리 로직은 아래와 같습니다. 여기서 중요하게 생각한 부분은 플레이스홀더 처리입니다.

    public override string? Execute(IPlayer player)
    {
        var id = base.Execute(player);
    
        var leftValue = Ai.Common.Helper.GetMatches(player, this.GetType().GetProperty(nameof(LeftValue)), LeftValue);
        var rightValue = Ai.Common.Helper.GetMatches(player, this.GetType().GetProperty(nameof(RightValue)), RightValue);
        var separator = Ai.Common.Helper.GetMatches(player, this.GetType().GetProperty(nameof(Separator)), Separator);
    
        Result = leftValue + separator + rightValue;
    
        if (Variables != null && Variables.Length > 0)
        {
            foreach (string variable in Variables)
            {
                var v = Ai.Common.Helper.GetMatches(player, this.GetType().GetProperty(nameof(Variables)), variable);
    
                if (string.IsNullOrEmpty(separator))
                    Result += v;
                else
                    Result += v + separator;
            }
    
            if (!string.IsNullOrEmpty (separator) && Result.EndsWith(separator))
                Result = Result.Substring(0, Result.Length - separator.Length);
        }
    
        return id;
    }

     

    왼쪽 값은 1이고, 오른쪽 값은 2입니다. 그리고, 구분자로 +를 입력했기 때문에 결과는 1+2가 됩니다.

    ETBNJQH.jpeg

     

     

    만약, 변수로부터 데이터를 가져와서 처리하려면 아래와 같이 만들면 됩니다. 변수 a와 b에는 각각 초기값이 1과 2로 등록되어 있습니다.

    L2jjjp0.jpeg

     

     

    변수 가져오기에서 왼쪽 값과 오른쪽 값을 변수로부터 가져오면 됩니다.

    pSQMD8D.jpeg

     

     

    연결할 문자가 3개 이상이라면 이 방법으로 처리하기는 매우 까다롭습니다. 문자열 연결 액션을 2개 만들어서 변수에 넣었다가 빼야 하거든요. 그래서, 변수 목록을 이용해서 처리할 수 있도록 했습니다. 아래와 같이 변수 c를 1개 더 추가하세요.

    fArCrvB.jpeg

     

     

    변수 목록을 클릭하고, 한줄에 하나씩 변수 이름을 적어줍니다.

    P85yl78.jpeg

     

     

    매크로를 실행하고 결과를 확인해보면 변수들이 모두 + 구분자로 연결된 것을 확인할 수 있습니다.

    BRjz1nU.jpeg

     

     

    플레이스홀더를 이용해서 아래와 같이 사용해도 됩니다.

    btQuRqW.jpeg

     

     

    다음에는 이 내용을 응용해서 사칙연산 액션을 만들어 보도록 하겠습니다. 가장 많이 사용되는 액션이 사칙연산, 좌표계산과 같은 액션들입니다. 더 복잡한 산술연산자들도 있지만, 거의 쓸일은 없을겁니다. 그렇더라도 엔지엠 6에 추가되었던 모든 액션들은 추가할겁니다. 아무래도, 복잡한 통계식이나 연속적인 트랜드를 분석하는 용도라면 데이타베이스를 활용하는게 더 좋기 때문에 매크로 프로그램에서 이런 것들의 활용도가 많이 떨어질수밖에 없습니다.

     

    많은 데이터를 처리해야 하는 경우 컴퓨터의 메모리에서 모두 처리하기 보다는 대용량 데이터 처리에 특화된 시계열 DB나 관계형 DB를 이용해서 처리된 결과만 매크로에서 사용해야 합니다. 엔지엠소프트웨어 홈페이지에도 간단하지만, PostgreDB나 InfluxDB에 대한 내용들도 있으니 인터넷에 한번 검색 해보시면 좋을듯 합니다. 둘다 무료로 사용할 수 있어서 실제 현업에서 많이 채택하는 데이터베이스입니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.