푸터 콘텐츠로 바로가기
IRONXL 사용하여

C#을 사용하여 쉼표가 포함된 CSV 파일을 읽는 방법

CSV 파일은 데이터에 쉼표가 포함될 때까지 간단해 보이지만 -- 갑자기 'Smith, John'은 두 개의 개별 필드로 나뉘어 주소가 모든 쉼표에서 분리되고, 꼼꼼하게 구조화된 데이터가 혼란으로 변합니다. 기본 String.Split(',') 접근 방식은 실제 세계의 CSV 데이터에 실패하는 반면, IronXL은 이러한 복잡성을 자동으로 처리하는 신뢰할 수 있는 솔루션을 제공합니다.

지금 바로 IronXL으로 시작하세요.
green arrow pointer

왜 쉼표가 CSV 구문 분석을 방해할까요?

CSV (Comma-Separated Values) 파일은 열값 사이의 구분자로 쉼표를 사용하므로, 데이터 자체에 쉼표가 포함되어 있을 경우 내재적인 충돌을 일으킵니다. RFC 4180 표준은 쉼표가 포함된 필드를 큰따옴표로 감싸야 한다고 요구함으로써 이를 다루고 있습니다. 적절한 처리가 없으면 "123 Main St, Suite 400, New York" 같은 간단한 주소가 하나로 남지 않고 세 개의 별도 필드로 나뉩니다.

전통적인 CSV 구문 분석 방법은 따옴표로 감싼 셀이나 문자열 값 내의 쉼표의 문맥을 인식하지 못하기 때문에 실패합니다. 문자열 라인에 적용된 기본 분할 메소드는 인용 부호를 해석하지 않아서 손상된 표형 데이터 및 잘못된 데이터 구조를 초래합니다. 이 문제는 수없이 많은 비즈니스 시나리오에 영향을 미칩니다: 고객 주소, 제품 설명, 재무 수치, 그리고 Excel 가져오기에 모두 쉼표가 일반적으로 포함된 데이터를 포함합니다. Microsoft의 문서조차도 특수 문자가 포함된 CSV 구문 분석의 복잡성을 인정합니다.

현실 세계의 데이터셋으로 작업할 때 문제는 특히 분명해집니다. "Hammer, 16oz, Steel-Head"와 같은 제품명을 포함하는 CSV 파일 또는 "Johnson, Jr., Robert A." 같은 이름을 가진 고객 기록을 고려할 때, 이러한 패턴은 단순한 파서를 즉시 무너뜨립니다. 재무 데이터는 또 다른 흔한 함정입니다: 천 단위 구분 기호로 형식화된 통화 금액(예: "1,234.56")은 단순한 쉼표 분할 루틴에 두 개의 별도 값처럼 보입니다.

왜 쉼표가 CSV 구문 분석을 망치는지 이해하는 것은 RFC 4180 인용 표준을 제대로 처리하는 솔루션을 선택하는 첫 번째 단계입니다. 올바른 라이브러리는 수작업, 정규 표현식, 또는 사용자 지정 상태 머신 파서의 필요성을 없애줍니다.

CSV 라이브러리를 어떻게 설치합니까?

IronXL은 NuGet 패키지 관리자를 통해 몇 초 만에 설치됩니다. 패키지 관리자 콘솔 또는 .NET CLI 중 하나를 사용할 수 있습니다:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

설치 후 라이브러리는 즉시 .NET 10 프로젝트에서 사용할 수 있습니다. IronXL은 Microsoft Office 또는 Excel을 호스트 머신에 설치하지 않아도 독립적으로 작동합니다 - 이는 서버 측 및 Office 라이선스가 없는 클라우드 배포에 중요한 이점입니다.

설치 후 IronXL 네임스페이스를 파일에 추가하고 CSV 데이터를 로드할 준비가 됩니다. 라이브러리는 .NET Framework 4.6.2 이상, 및 모든 .NET Core, .NET 5, 6, 7, 8, 10 버전을 대상으로 하므로, 레거시 및 최신 애플리케이션 스택과 호환됩니다.

설치 확인

패키지를 추가한 후 프로젝트에서 빠른 가져오기 테스트를 실행하여 설치가 작동하는지 확인하십시오. NuGet 패키지는 Windows, Linux 및 macOS에 필요한 모든 네이티브 바이너리를 포함하므로 추가 설정 단계가 필요하지 않습니다. Docker 기반 배포의 경우 패키지가 대상 플랫폼에서 네이티브 종속성을 자동으로 해결합니다.

라이브러리가 쉼표가 포함된 CSV 파일을 어떻게 읽습니까?

IronXL은 특수 문자를 처리하며 파일 인코딩 및 구분 기호를 지정하고 로드할 때 CSV 데이터를 허용합니다. 라이브러리는 RFC 4180 표준에 따라 인용 문자열 값을 자동으로 인식하고 적절하게 구문 분석하여 사용자 지정 루프 로직이나 수동 분석 코드의 필요성을 제거합니다.

CSV 데이터를 읽기 위한 핵심 메소드는 WorkBook.LoadCSV()이며, 파일 형식, 구분자, 인코딩에 대한 선택적 매개변수와 함께 파일 경로를 수락합니다. 쉼표가 포함된 CSV 파일을 읽는 가장 간단한 방법은 다음과 같습니다:

using IronXL;

// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel if needed
workbook.SaveAs("output.xlsx");
using IronXL;

// Load CSV with automatic comma handling
WorkBook workbook = WorkBook.LoadCSV("data.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

// Access the parsed data
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Save as Excel if needed
workbook.SaveAs("output.xlsx");
$vbLabelText   $csharpLabel

LoadCSV 메소드는 인용 부호와 CSV 문자열을 지능적으로 처리하여 포함된 쉼표와 관계없이 각 열 값이 온전히 유지되도록 보장합니다. CSV 파일 작업에 대한 자세한 사항은 공식 IronXL CSV 구문 분석 튜토리얼을 참조하세요.

출력 이해하기

로드 후, CSV 데이터는 각 행과 열이 원래의 CSV 구조와 직접적으로 일치하는 WorkSheet 객체에 매핑됩니다. 쉼표가 포함된 인용 필드는 단일 셀 값으로 나타나며, 이는 원본 파일의 정확히 동일한 모습입니다.

아래 이미지는 왼쪽의 원본 CSV 파일과 오른쪽의 출력 Excel 파일을 비교하여 보여줍니다:

C# 데이터에 쉼표가 포함된 CSV 읽기 with IronXL: 이미지 1 - 원본 CSV 파일(왼쪽) vs. 출력 엑셀 파일(오른쪽)

구문 분석 후 셀 데이터에 액세스하기

CSV가 WorkBook에 로드되면 행과 열 색인을 사용하여 WorkSheet 객체를 통해 셀 데이터에 접근할 수 있습니다. 각 셀은 StringValue, DecimalValueIntValue와 같은 타입의 액세서에 액세스를 제공하므로 일반적인 데이터 타입에 대한 수동 변환이 필요하지 않습니다.

쉼표가 포함된 CSV 파일을 단계별로 어떻게 파싱합니까?

다음의 완전한 예시는 데이터 필드 자체에 쉼표가 포함된 경우도 IronXL이 쉼표로 분리된 값을 처리하는 방법을 보여줍니다. 이 예제는 메모리에 샘플 CSV를 생성하고, 디스크에 작성하고, IronXL로 구문 분석하고 각 필드 값을 표시합니다:

using IronXL;
using System;
using System.IO;

// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";

// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);

// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

WorkSheet ws = workbook.DefaultWorkSheet;

// Read and display each parsed row
foreach (var row in ws.Rows)
{
    if (row.RowNumber == 0) continue; // Skip header row

    string name        = row.Columns[0].StringValue;
    string address     = row.Columns[1].StringValue;
    string description = row.Columns[2].StringValue;
    decimal price      = row.Columns[3].DecimalValue;

    Console.WriteLine($"Customer:    {name}");
    Console.WriteLine($"Address:     {address}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine($"Price:       ${price:N2}");
    Console.WriteLine();
}

// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
using IronXL;
using System;
using System.IO;

// Create sample CSV content with embedded commas
string csvContent = @"Name,Address,Description,Price
""Johnson, Mark"",""123 Main St, Apt 4B"",""High-quality, durable product"",""1,234.56""
""Smith Ltd."",""789 Corporate Blvd, Suite 200"",""Professional, reliable service"",""2,999.00""
""Williams & Co."",""456 Park Ave, Floor 12"",""Lightweight, portable design"",""899.99""";

// Write sample data to a CSV file
File.WriteAllText("sample.csv", csvContent);

// Load CSV with IronXL -- commas inside quoted fields are handled automatically
WorkBook workbook = WorkBook.LoadCSV("sample.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",");

WorkSheet ws = workbook.DefaultWorkSheet;

// Read and display each parsed row
foreach (var row in ws.Rows)
{
    if (row.RowNumber == 0) continue; // Skip header row

    string name        = row.Columns[0].StringValue;
    string address     = row.Columns[1].StringValue;
    string description = row.Columns[2].StringValue;
    decimal price      = row.Columns[3].DecimalValue;

    Console.WriteLine($"Customer:    {name}");
    Console.WriteLine($"Address:     {address}");
    Console.WriteLine($"Description: {description}");
    Console.WriteLine($"Price:       ${price:N2}");
    Console.WriteLine();
}

// Export to Excel format for distribution
workbook.SaveAs("parsed_data.xlsx");
Console.WriteLine("Data exported to parsed_data.xlsx");
$vbLabelText   $csharpLabel

이 사례에서는 몇 가지 주요 기능이 시연됩니다:

  • 자동 인용 부호 처리: "Johnson, Mark"와 같은 필드는 CSV 데이터 내부에 쉼표가 포함되어 있어도 무결성을 유지합니다.
  • 중첩된 쉼표: IronXL은 동일한 행 내에서 쉼표가 포함된 여러 필드를 정확하게 파싱하여 열 사이의 데이터 유출이 없습니다.
  • 타입 변환: StringValueDecimalValue와 같은 타입의 액세서가 수동 구문 분석 없이 개별 값에 대한 액세스를 단순화합니다.
  • Excel 내보내기: 향상된 기능 및 공유를 위해 동일한 워크플로우에서 CSV를 Excel 형식으로 변환할 수 있습니다.

아래 이미지는 왼쪽의 샘플 CSV 파일과 오른쪽의 구문 분석된 Excel 출력을 비교하여 보여줍니다:

C# 데이터에 쉼표가 포함된 CSV 읽기 with IronXL: 이미지 2 - 샘플 CSV 파일(왼쪽) vs. 구문 분석된 엑셀 출력(오른쪽)

어떤 고급 CSV 기능이 제공됩니까?

기본 쉼표 처리 외에도, IronXL은 전체 CSV 처리 기능 세트를 제공합니다. 다른 구분 기호, 문자 인코딩, 또는 프로덕션급 오류 처리가 필요할 때, 라이브러리는 유연한 옵션을 제공합니다:

using IronXL;
using System;
using System.Text;

// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");

// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: Encoding.UTF8);

// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: "\t");

// Production-ready error handling for CSV with commas in data
try
{
    WorkBook data = WorkBook.LoadCSV("file.csv",
        fileFormat: ExcelFileFormat.XLSX,
        listDelimiter: ",");

    WorkSheet sheet = data.DefaultWorkSheet;

    Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Log and implement appropriate recovery logic
}
using IronXL;
using System;
using System.Text;

// Custom delimiter support -- semicolon-delimited files common in European locales
WorkBook semicolonData = WorkBook.LoadCSV("data.txt",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ";");

// Handle UTF-8 encoding for international CSV files
WorkBook internationalData = WorkBook.LoadCSV("international.csv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: ",",
    encoding: Encoding.UTF8);

// Tab-delimited files (TSV format)
WorkBook tsvData = WorkBook.LoadCSV("export.tsv",
    fileFormat: ExcelFileFormat.XLSX,
    listDelimiter: "\t");

// Production-ready error handling for CSV with commas in data
try
{
    WorkBook data = WorkBook.LoadCSV("file.csv",
        fileFormat: ExcelFileFormat.XLSX,
        listDelimiter: ",");

    WorkSheet sheet = data.DefaultWorkSheet;

    Console.WriteLine($"Loaded {sheet.Rows.Count()} rows successfully.");
}
catch (Exception ex)
{
    Console.WriteLine($"CSV parsing error: {ex.Message}");
    // Log and implement appropriate recovery logic
}
$vbLabelText   $csharpLabel

IronXL은 다양한 구분 기호 - 파이프, 탭, 세미콜론 및 모든 단일 문자 - 를 지원하고 여러 문자 인코딩을 처리하며, 모든 크기의 파일을 효율적으로 처리합니다. 복잡한 데이터 시나리오를 처리하려면 데이터 조작 기능 및 암호로 보호된 파일 처리와 수식 계산과 같은 기업 기능을 탐색하십시오.

다양한 구분 기호 형식 작업

많은 시스템이 쉼표 이외의 구분 기호를 사용하여 데이터를 내보냅니다. 유럽 지역의 응용 프로그램은 일반적으로 세미콜론을 사용합니다. 그 지역의 소수점 구분 기호가 쉼표이기 때문입니다. 레거시 시스템과 데이터 웨어하우스 내보내기에서는 파이프로 구분된 파일이 일반적입니다. IronXL은 listDelimiter 매개변수를 통해 이러한 모든 것을 처리하여 구문 분석 논리를 다시 작성하지 않고 형식을 단일 문자 변경으로 전환합니다.

인코딩 및 국제 문자 처리

문자 인코딩 문제는 미세한 데이터 손상을 일으켜 감지하기 어렵습니다. CSV 파일에 ASCII 이외의 문자(강세 문자가 있는 글자, CJK 문자, 또는 통화 기호)가 포함된 경우 올바른 인코딩을 지정하면 뒤죽박죽 된 출력을 방지할 수 있습니다. IronXL은 UTF-8, UTF-16, Latin-1 및 플랫폼 별 인코딩을 포함하여 모든 System.Text.Encoding 인스턴스를 수락합니다.

전용 라이브러리가 수동 CSV 구문 분석보다 더 뛰어난 이유는 무엇인가요?

IronXL은 Microsoft Office 의존성 없이 독립적으로 운영되며 서버 배포 및 클라우드 응용 프로그램에 이상적입니다. Office Interop이 필요한 솔루션과 달리 IronXL은 Windows, Linux 및 macOS에서 실행되며 .NET Framework 4.6.2+와 .NET Core/5/6/7/8/10+를 지원합니다.

이 라이브러리는 가장 간단한 구문 분석기를 망치는 에지 케이스를 지능적으로 처리하여 일반적인 CSV 구문 분석 문제를 제거합니다. 아래 표는 일반적인 접근 방식을 비교합니다:

C#에서의 CSV 구문 분석 접근 방식 -- 비교
접근 방식 인용된 쉼표 처리 인코딩 지원 엑셀 내보내기 생산 준비 완료
String.Split(',') 아니요 아니요 아니요 아니요
TextFieldParser (VB) 제한된 아니요 부분적
CsvHelper (OSS) 아니요
IronXL

통화 형식 있는 금융 보고서, 국제 문자 있는 고객 데이터 또는 특수 문자 있는 시스템 로그를 처리하든 IronXL은 구문 분석 과정 내내 데이터 무결성을 유지합니다. Stack Overflow 논의에 따르면 CSV 필드 내의 쉼표 처리는 가장 자주 발생하는 구문 분석 문제 중 하나이며, IronXL은 이를 직접 다룹니다.

성능 특성

IronXL은 대형 CSV 파일을 한 번에 전체 파일을 메모리에 로드하지 않고 스트리밍하여 수백만 행의 파일을 처리하기에 적합합니다. 라이브러리의 메모리 효율적인 디자인은 표준 서버 인스턴스에서 대용량 데이터 로드를 위해 추가 RAM을 프로비저닝하지 않고도 CSV 구문 분석 작업을 실행할 수 있음을 의미합니다.

수식 계산셀 스타일링의 경우 IronXL은 CSV 데이터를 .xlsx 형식으로 변환할 때 Excel의 완전한 호환성을 유지합니다. 이는 하위 소비자가 원시 테이블 데이터가 아닌 서식이 지정된 Excel 출력을 기대할 때 중요합니다.

배포 유연성

IronXL은 Microsoft Office 의존성이 없기 때문에 .NET을 실행하는 모든 환경에 배포할 수 있습니다. 여기에는 Linux 컨테이너, Azure Functions, AWS Lambda 및 온프레미스 Windows Server가 포함됩니다. 생산 환경을 위해, IronXL은 기업 응용 프로그램이 요구하는 신뢰성과 지원 구조를 제공하며, 전문 라이센싱 및 지속적인 업데이트로 뒷받침됩니다.

언제 전체 기능의 스프레드시트 라이브러리를 선택해야 하나요?

올바른 CSV 라이브러리를 선택하는 것은 구체적인 요구 사항에 따라 다릅니다. IronXL은 다음 기능 조합이 필요할 때 가장 좋은 선택입니다:

  • 보고서 또는 배포를 위해 Excel 형식으로 변환해야 하는 CSV 파일 읽기
  • 비 ASCII 문자 또는 다중 바이트 인코딩이 있는 국제 CSV 파일 처리
  • Windows, Linux 및 macOS에서 플랫폼 독립적인 코드 없이 작업하는 응용 프로그램 빌드
  • 서버 또는 클라우드 환경에서 Microsoft Office Interop 의존성 회피
  • 셀 서식, 명명된 범위, 및 수식 등의 추가 스프레드시트 기능 액세스

CSV를 구문 분석하는 것 외에 아무것도 필요하지 않은 가벼운 시나리오의 경우, 목적에 맞게 제작된 CSV 전용 라이브러리로 충분할 수 있습니다. 그러나 CSV 구문 분석이 Excel 출력이 포함된 보다 넓은 데이터 처리 파이프라인의 한 단계인 경우, IronXL은 여러 종속성의 필요를 제거합니다.

라이브러리의 API 참조는 모든 사용 가능한 메서드와 매개변수를 자세히 설명하여 기본 CSV 로딩을 넘어선 기능을 쉽게 발견할 수 있게 합니다. 튜토리얼 섹션은 일반적인 워크플로우, CSV 구문 분석, 셀 조작 및 파일 형식 변환에 대해 단계별 가이드를 제공합니다.

무료 체험판으로 시작하는 방법은?

C#에서 중첩된 쉼표가 있는 CSV 파일을 읽는 것은 복잡할 필요가 없습니다. IronXL은 이 문제를 깨끗하고 신뢰할 수 있는 코드로 변환합니다. 자동으로 큰따옴표, 쉼표 및 인용된 셀을 처리하여 CSV 구문 분석의 에지 케이스가 아닌 응용 프로그램 논리에 집중할 수 있게 합니다.

시작하기 위한 단계는 간단합니다:

  1. dotnet add package IronXL로 NuGet 패키지를 설치하세요
  2. 파일 경로 및 구분자를 포함하여 WorkBook.LoadCSV()를 호출하세요
  3. 형식 변환기를 사용하여 행과 열을 반복적으로 처리하기
  4. 선택적으로 workbook.SaveAs()와 함께 .xlsx로 내보내기

무료 체험판 시작하여 라이선스를 구매하기 전에 환경에서 IronXL을 테스트해 보세요. 체험판은 30일 동안 모든 기능에 대한 전체 액세스를 제공합니다. 프로덕션 배포 준비가 되면, 배포 규모에 맞는 라이선스를 구매세요. 옵션은 개별 개발자, 소규모 팀, Enterprise 전체 사용을 위해 제공됩니다.

자주 묻는 질문

C#에서 CSV 파일을 읽을 때 데이터에 포함된 쉼표를 어떻게 처리해야 할까요?

IronXL 쉼표가 포함된 CSV 파일을 읽는 강력한 솔루션을 제공합니다. 따옴표로 묶인 필드와 특수 문자를 자동으로 처리하여 쉼표로 인해 데이터가 분할되지 않고 그대로 유지되도록 합니다.

CSV 파일에 쉼표가 포함되어 있을 때 String.Split(',')이 실패하는 이유는 무엇입니까?

`String.Split(',')` 메서드는 모든 쉼표를 구분자로 처리하는데, 데이터 필드 자체에 쉼표가 포함되어 있는 경우 문제가 발생합니다. IronXL CSV 파일을 지능적으로 파싱하여 따옴표로 묶인 필드를 인식하고 데이터 무결성을 유지함으로써 이 문제를 해결합니다.

C#에서 CSV 파싱에 IronXL 사용하는 장점은 무엇인가요?

IronXL CSV 파일 구문 분석 프로세스를 간소화하여 쉼표가 포함된 데이터나 따옴표로 묶인 필드와 같은 복잡한 시나리오를 자동으로 처리함으로써 개발자의 시간을 절약하고 데이터 처리 과정에서 발생할 수 있는 오류를 줄여줍니다.

IronXL CSV 파일의 다른 특수 문자도 처리할 수 있나요?

네, IronXL 은 특수 문자 및 따옴표로 묶인 필드를 처리하도록 설계되어 가장 복잡한 CSV 파일까지도 정확하게 구문 분석할 수 있습니다.

IronXL 대용량 CSV 파일에 적합한가요?

IronXL 최적화된 구문 분석 기능 덕분에 대용량 CSV 파일을 빠르고 정확하게 처리하여 효율적으로 관리할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me