728x90

CsvHelper 사용하는 방법입니다.

이를 사용하면 CSV 문자열에 ,(콤마)나  "(쌍따옴표), 개행문자 등도 처리할 수 있습니다.

 

1. 'CsvHelper' Nuget 패키지 설치

 

2. CSV 구조 정의

public class Employee
{
    [Name("이름")]
    public string? Name { get; set; }
    [Name("이메일")]
    public string? Email { get; set; }
    [Name("전화번호")]
    public string? PhoneNumber { get; set; }
    [Name("나이")]
    public int Age { get; set; }
}

 

3. CSV 파일 쓰기

List<Employee> datas = new List<Employee>
{
    new Employee { Name = "강,감찬", Email = "kang@naver.com", PhoneNumber = "010-1111-2222", Age = 23 },
    new Employee { Name = "이순\"신", Email = "lee@daum.com", PhoneNumber = "010-3333-5555", Age = 47 },
    new Employee { Name = "홍길동", Email = "honggil@gmail.com\r\n", PhoneNumber = "010-6666-7777", Age = 36 }
};

using (var streamWriter = new StreamWriter("data.csv"))
{
    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
    {
        csvWriter.WriteRecords(datas);
    }
}

결과

CsvHelper 쓰기

 

4. CSV 파일 로드하기

using (var streamReader = new StreamReader("data.csv"))
{
    using (var csvReader = new CsvReader(streamReader, CultureInfo.InvariantCulture))
    {
        List<Employee> records = csvReader.GetRecords<Employee>().ToList();
    }
}

결과

CsvHelper 읽기

 

5. CSV 내용 추가하기

List<Employee> addDatas = new List<Employee>
{
    new Employee { Name = "세종대왕", Email = "sejoing@gmail.com", PhoneNumber = "010-8888-9999", Age = 51 }
};

CsvConfiguration csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture);
csvConfiguration.HasHeaderRecord = false;

using (var fileStream = File.Open("data.csv", FileMode.Append))
{
    using (var streamWriter = new StreamWriter(fileStream))
    {
        using (var csvWriter = new CsvWriter(streamWriter, csvConfiguration))
        {
            csvWriter.WriteRecords(addDatas);
        }
    }
}

결과

CsvHelper 추가 쓰기

[Source]

https://github.com/kei-soft/CsvHelperTest

 

GitHub - kei-soft/CsvHelperTest

Contribute to kei-soft/CsvHelperTest development by creating an account on GitHub.

github.com

 

728x90
Posted by kjun.kr
,