📌 개요
웹 애플리케이션 개발 중 클라이언트에서 전달받은 복잡한 형태의 문자열 데이터를 파싱해야 하는 경우가 자주 발생합니다. 특히 여러 항목의 정보가 구분자로 연결된 데이터를 처리할 때는 안정성과 가독성을 모두 고려해야 합니다.
이번 글에서는 실제 프로젝트에서 사용한 문자열 파싱 코드를 통해 효율적이고 안전한 데이터 처리 방법을 소개합니다.
🎯 문제 상황
다음과 같은 형태의 문자열 데이터를 받아 처리해야 하는 상황입니다:
"카테고리1|원가|할인가|판매가|수량|가격|메뉴ID|옵션가:카테고리2|원가|할인가|판매가|수량|가격|메뉴ID|옵션가:undefined..."
🔍 데이터 구조 분석
- 각 항목은 콜론(:)으로 구분
- 각 항목 내의 필드는 파이프(|)로 구분
- 총 8개의 필드로 구성 (카테고리, 원가, 할인가, 판매가, 수량, 가격, 메뉴ID, 옵션가)
- 일부 항목에 "undefined" 문자열이 포함될 수 있음
💡 해결 방법
1단계: 항목 분리 및 필터링
string[] arr_Items = strItems.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
string[] filtered = arr_Items.Where(item => !item.Contains("undefined")).ToArray();
string[] filtered = arr_Items.Where(item => !item.Contains("undefined")).ToArray();
✅ 핵심 포인트
- StringSplitOptions.RemoveEmptyEntries를 사용하여 빈 문자열 제거
- LINQ의 Where를 활용해 "undefined" 포함 항목 필터링
- 깔끔하고 읽기 쉬운 코드 작성
2단계: 각 항목 파싱
for (int i = 0; i < filtered.Length; i++)
{
int responsePrice = 0;
if (string.IsNullOrWhiteSpace(filtered[i])) continue; // 빈 항목 건너뜀
string[] parts = filtered[i].Split('|');
if (parts.Length >= 8)
{
int responsePrice = 0;
if (string.IsNullOrWhiteSpace(filtered[i])) continue; // 빈 항목 건너뜀
string[] parts = filtered[i].Split('|');
if (parts.Length >= 8)
{
Categ = parts[0]; // 카테고리
CostView = parts[1]; // 원가
DisPrice = parts[2]; // 할인가
Price = parts[3]; // 판매가
Amount = parts[4]; // 수량
SubPrice = parts[5]; // 가격
Menu = parts[6]; // 메뉴 ID
AdPrice = parts[7]; // 추가 가격
}
}
🛡️ 안전성 확보
- IsNullOrWhiteSpace로 빈 문자열 체크
- parts.Length >= 8로 필드 개수 검증
- 인덱스 범위 초과 예외 방지
'ASP.NET' 카테고리의 다른 글
| C# Code-behind 메서드를 사용하여 onclick 이벤트를 처리하는 방법 (0) | 2025.11.22 |
|---|---|
| C#에서 Eval를 int로 변환하는 방법 (0) | 2025.11.21 |
| "GenerateApplicationManifest" 작업에서 예기치 않은 오류가 발생했습니다. (0) | 2025.10.30 |
| C#에서 선택한 날짜의 요일을 구하는 방법 (0) | 2025.10.30 |