EDI 줄번호를 포함하고 있는 텍스트는 일정한 규칙에 따라 다양한 길이의 데이터를 순차적으로 담고 있으며, 그 길이 정보는 별도의 배열로 관리할 수 있습니다. 이를 활용하면 각 구간을 정확히 나누는 작업이 가능해요.
보통 EDI 파일은 데이터를 순차적으로 기록하는 방식이 일반적이지만, 가끔은 '반대로 나누어야 하는 상황'도 발생할 수 있습니다.
즉, 특정 패턴이나 규칙에 따라 데이터를 순서대로 읽어들여 나눈 후, 다시 원본 형태의 순서로 데이터를 배치하거나 조작해야 하는 경우가 있지요. 이러한 작업은 배열을 통해 각 구간의 길이를 확인하고, 그에 맞춰 데이터를 분리하는 방식으로 처리할 수 있어요.
이번에는 C#을 이용하여 EDI와 같이 일렬로 나열된 텍스트 데이터를 배열에 저장된 길이 정보에 따라 구간별로 나누는 방법을 소개하겠습니다. 또한, 잘못된 인덱스나 범위를 벗어난 경우 발생할 수 있는 예외 처리에 대해서도 다룰 거예요.
코드 설명 및 안내
다음은 EDI 데이터를 배열의 길이에 따라 구간으로 나누는 코드입니다. 입력된 배열에 따라 구간의 시작 인덱스를 계산하고, 구간에 맞는 데이터를 추출하는 방법을 보여줍니다. 구간을 추출하는 방법뿐만 아니라, 인덱스 범위를 초과한 경우나 예외 상황을 처리하였어요.
public static string GetEdiData(string text, int[] ediLengths, int index)
{
// 배열 범위 체크
if (index < 0 || index >= ediLengths.Length)
{
throw new ArgumentOutOfRangeException(nameof(index), "인덱스가 범위를 벗어났습니다.");
}
// 시작 인덱스 계산
int startIndex = 0;
for (int i = 0; i < index; i++)
{
startIndex += ediLengths[i];
}
// 길이 설정
int length = ediLengths[index];
// 문자열 범위를 벗어나지 않도록 조정
if (startIndex + length > text.Length)
{
throw new ArgumentOutOfRangeException("문자열 범위를 벗어났습니다.");
}
// 문자열 추출
return text.Substring(startIndex, length);
}
void BeomSang()
{
// 예시 텍스트와 배열
string ediText = "ABCDEFGHIJKL";
int[] ediLengths = new int[] { 3, 3, 4, 2 };
try
{
// 테스트 케이스 1: 정상적인 경우
string result1 = GetEdiData(ediText, ediLengths, 2); // 인덱스 2인 경우, 길이 4
Console.WriteLine($"2번째 구간의 데이터: {result1}"); // 예상: GHIJ
// 테스트 케이스 2: 인덱스 범위를 초과한 경우
string result2 = GetEdiData(ediText, ediLengths, 4); // 인덱스 4 (범위 초과)
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine($"예외 발생: {ex.Message}");
}
}
코드 설명
GetEdiData메서드: 주어진text와 배열ediLengths를 사용하여, 특정index에 해당하는 구간을 추출합니다. 구간의 시작 인덱스는 앞서 추출된 구간들의 길이를 모두 더해 계산합니다.- 배열 범위 및 예외 처리: 인덱스가 배열의 길이를 초과하거나, 문자열을 벗어나는 경우
ArgumentOutOfRangeException을 통해 예외를 발생시킵니다. - 메인 메서드:
ediText = "ABCDEFGHIJKL"과 배열{3, 3, 4, 2}를 사용하여 구간을 나눕니다.GetEdiData메서드로 정상적인 구간과 범위를 벗어나는 구간을 각각 테스트합니다.
인덱스 0 => "ABC"
인덱스 1 => "DEF"
인덱스 2 => "GHIJ"
인덱스 3 => "KL"
테스트 설명
- 정상적인 구간 추출: 두 번째 구간(인덱스 2)은
GHIJ를 출력합니다. 😊 - 인덱스 초과 예외 처리: 인덱스 4는 배열 길이를 초과하므로, 예외 메시지
"인덱스가 범위를 벗어났습니다"를 출력합니다. 😊 - 이 코드를 사용하면 EDI와 같이 길이별로 데이터를 나누는 작업을 처리할 수 있을 거예요. 배열에 저장된 길이 정보에 따라 텍스트를 구간별로 나누어 추출하면 돼요~
