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

C# .NET 매크로 프로그램 만들기. (CSV와 텍스트 파일을 엑셀 파일처럼 처리하는 방법)

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

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

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원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 앞서 텍스트 파일과 엑셀 파일의 데이타를 어떻게 처리하는지 알아봤습니다. 전체 데이타를 변수로 처리할 수 있는 기능도 추가해야겠네요. 글을 작성하려다가 갑자기 생각이 났습니다. 포이치 반복이 아닌 변수에 배열로 데이타를 넣고, 사용자가 마음데로 가공해서 사용할 수 있도록 하는것도 괜찮을거 같아요.

 

우선, 데이타라는건 텍스트 파일처럼 한줄에 하나씩 입력해서 처리할 수 있습니다. 하지만, 엑셀처럼 열과 행으로 된 데이타를 사용하고 싶을수도 있는데요. 그렇다고해서 매번 엑셀 파일을 만들어서 데이타를 입력하고 처리하는건 귀찮은 일일수도 있습니다. 그래서, 간단한 CSV파일을 이용하기도 합니다. 아래는 CSV 파일의 내용인데요. 간단한 형식만 지원하기 때문에 확장성은 많이 떨어집니다.

 

 

만약, 데이타에 콤마가 있으면 CSV 파일로 처리하기는 쉽지 않습니다. 사람이 눈으로 확인하고, 열 구분이 어디까지인지 판단하는거랑 컴퓨터는 생각하는 메커니즘 자체가 다르니까요. 그래서, 다른 구분자(Separator)를 사용할 수 있는 선택지를 제공해야 할거 같아요. 그러면, 열을 구분하는 콤마 대신 다른 것들을 사용할 수 있거든요. 이렇게 되면 확장성이 대폭 향상되게 됩니다. 아래와 같이 구분자 속성을 하나 추가하면 될거 같네요.

[LocalizedCategory("Action")]
[LocalizedDisplayName("ColumnSeparator")]
[LocalizedDescription("ColumnSeparator")]
[Browsable(true)]
[DefaultValue(null)]
public char? ColumnSeparator { get; set; }

 

파일을 처리하는 로직은 그렇게 복잡하지 않은데요. 이미 Csv 파일 처리 로직은 만들었기 때문에 구분자만 다르게하면 코드를 재사용할 수 있겠네요.

case Definition.FileType.Txt:
    if (ColumnSeparator == null)
        _datas = File.ReadAllLines(SelectDataSource).ToList();
    else
    {
        if (TableDirection == Definition.TableDirection.CustomHeaderColumnRow || TableDirection == Definition.TableDirection.CustomHeaderRowColumn)
        {
            player.Manager.Output.WriteLine($"[{TableDirection.ToString()}] {player.Manager.Client.ResxMessage.GetString("NotSupportOption")}", log4net.Core.Level.Warn);
            return 0;
        }

        _datas = ExcelExt.Manager.ReadCsv(SelectDataSource, UseHeader, TableDirection, CustomColumns, ColumnSeparator);
    }

 

기존의 텍스트 파일 처리 로직에서 구분자를 추가하여 처리할 수 있도록 해야 합니다. 텍스트 파일과 CSV 처리 로직은 거의 동일합니다. 구분자만 다를뿐이예요.

public static List<string?> ReadCsv(string path, bool useHeader, Ai.Definition.TableDirection tableDirection, string[]? headers, char? separator = null)
{
    if (separator == null)
        separator = ',';

    var result = new List<string?>();

    var rows = File.ReadAllLines(path);

    switch (tableDirection)
    {
        case Definition.TableDirection.ColumnRow:
            foreach (var row in rows)
                result.AddRange(row.Split(separator.Value));
            break;
        case Definition.TableDirection.RowColumn:
            for (int i = 0; i < rows.First().Split(separator.Value).Length; i++)
            {
                foreach (var row in rows)
                    result.Add(row.Split(separator.Value)[i]);
            }
            break;
    }

    return result;
}

 

완성된 기능을 테스트 해볼까요? 스크립트 구조는 아래와 같습니다. 여기서, CSV 파일을 선택하면 됩니다.

 

 

아래 동영상을 참고하셔서 CSV와 텍스트 파일을 테스트 해보세요.

https://youtu.be/5WVU-mqYwzw

 

 

이렇게해서 내용 반복기인 포이치 반복 액션에 대해 모두 알아봤습니다. 여기에서 추가해야 할 기능이 있을지는 모르겠지만, 텍스트 파일을 저장할 때 확장자를 ini나 bin등등... 어떤 시스템 확장자를 사용해도 됩니다. 다만, 정상적으로 읽어오려면 텍스트 파일로 작성한 내용이어야 합니다. 바이너리와 같이 어떤 처리가 된 경우에는 해당 프로그램에서만 사용 가능하기 때문에 정상적으로 값을 가져올 수 없어요^^

 

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

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

 

원본 글 보기

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

 

엔지엠소프트웨어

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

www.ngmsoftware.com

 

반응형

댓글