본문 바로가기
이미지 매크로

C# .NET 매크로 프로그램 만들기. (배열에 데이터를 추가할 수 있는 기능)

by 업무자동화 2024. 5. 27.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #엔지엠소프트웨어 #엔지엠에디터 #엔지엠플레이어 #비활성매크로 #하드웨어매크로 #기계식매크로 #마우스광클릭 #키보드매크로 #이미지서치 #이미지매치 #블로그 #카페 #인스타그램 #유튜브 #소셜네트워크 #카카오톡 #텔레그램 #자동화

 

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 요즘은 별수와 배열에 관련된 기능들을 계속 추가하고 있는데요. 배열은 1차원이 기본이지만, 다차원 배열도 처리할 수 있어야하기 때문에 어떻게 쉽게 사용할 수 있도록 디자인해야 할지 고민이 많습니다. 그리고, 배열도 상황에 따라서 종류가 많은데다가 스레드에 안전한 방식으로 처리할 수 있는지에 따라서 동기화할지 비동기로 처리할지도 선택해야 합니다.

 

하지만, GUI로 이런 모든 것들을 사용자가 직접 설정하는건 너무 많은 옵션을 제공해야 하고 복잡도가 정말 많이 올라갈겁니다. 그래서, 어느정도 기능에 제약을 둬서 쉽고 간단하게 사용하도록 유도하는게 좋을거 같아요. 그렇더라도 기능에 제약이 있으면 어떤 특수한 상황에 유연하게 대처하기가 어렵기 때문에 방법을 찾아보고 있는 중입니다. 일단은 1차원 배열을 처리할 수 있는 기능을 제공하고 이 후에 확장할 수 있는 플러그인이나 커스텀을 제공하는게 좋을듯 합니다. 고민이 많이 필요한 부분이라서 지금 당장 어떤 해답을 찾기엔 어려울거 같아요.

 

아래와 같이 배열을 처리할 수 있는 액션을 추가했습니다. 변수 추가, 변수 삭제, 변수 정렬입니다. 변수로부터 데이터를 가져오는 변수 선택도 필요한데요. 이건 다음에 알아볼께요.

 

 

변수 추가 액션에서 기본적으로 제공해야 할 속성들이 뭘까 고민하다가 아래와 같이 정의를 했습니다.

public class ArrayAddModel : BaseModel
{
    [NonSerialized]
    private string[]? _datas;

    [LocalizedCategory("Data")]
    [LocalizedDisplayName("Result")]
    [LocalizedDescription("Result")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string[]? Result { get; set; }

    [LocalizedCategory("Array")]
    [LocalizedDisplayName("RepeatData")]
    [LocalizedDescription("RepeatData")]
    [Browsable(true)]
    [DefaultValue(null)]
    public string[]? ArrayData { get { return _datas; } set { _datas = value; } }

    [LocalizedCategory("Action")]
    [LocalizedDisplayName("AddValues")]
    [LocalizedDescription("AddValues")]
    [Browsable(true)]
    [DefaultValue(null)]
    [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))]
    public string? AddValues { get; set; }

    [LocalizedCategory("Array")]
    [LocalizedDisplayName("ArrayAddLocation")]
    [LocalizedDescription("ArrayAddLocation")]
    [Browsable(true)]
    [DefaultValue(typeof(Ai.Definition.FindOption), "Last")]
    public Ai.Definition.FindOption AddLocation { get; set; } = Definition.FindOption.Last;

    [LocalizedCategory("Array")]
    [LocalizedDisplayName("ArrayIndex")]
    [LocalizedDescription("ArrayIndex")]
    [Browsable(true)]
    [DefaultValue(0)]
    public int Index { get; set; }

 

 

지금까지 개발 관련된 내용을 꾸준히 봐오신 분들은 대충 보더라도 어떤 내용인지 아마 감을 잡으실거 같아요. 여기서 중요한 내용은 AddLocation 속성인데요. 어떤 동작을 수행할지 결정하는 옵션입니다. 이 옵션은 아래와 같이 3가지 행동을 제공합니다. 사용자가 배열로 추가하고 싶은 항목을 첫번째 위치 또는 마지막 위치에 추가합니다. 만약, 특정 위치에 추가하고 싶으면 인덱스를 사용하면 됩니다.

public enum FindOption
{
    First = 0,
    Last = 1,
    Index = 2
}

 

구현부도 간단합니다. 아마도 배열 관련해서는 코드들이 전부 간단할거 같아요. 1차원 배열이라서 딕셔너리와 같은 Key, Value 형태를 처리할 수 있는 로직은 아직까지 필요하진 않은데요. 딕셔너리 배열을 처리할 때 코드도 복잡해질거 같아요. 디자인을 어떻게 하느냐에 따라서 달라질듯 하지만요.

 

아래는 전체 구현 내용입니다.

public override string? Execute(IPlayer player)
{
    var id = base.Execute(player);
    List<string>? datas = _datas.ToList();

    string[] av = AddValues.Replace(Environment.NewLine, "\\n").Split("\\n");

    switch (AddLocation)
    {
        case Definition.FindOption.First:
            datas.InsertRange(0, av);
            break;
        case Definition.FindOption.Last:
            datas.AddRange(av);
            break;
        case Definition.FindOption.Index:
            datas.InsertRange(Index, av);
            break;
    }

    Result = datas.ToArray();

    return id;
}

 

배열에 내용을 추가하는 기능을 다 만들었습니다. 지금까지 만들었던 액션들 중에서 가장 간단했던거 같아요. 아직 다 만든건 아니지만요. 이제 테스트를 해볼까요?

https://youtu.be/F7aIEbdQucs

 

 

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

 

반응형

댓글