C #에 CSV 리더 / 라이터 라이브러리가 있습니까? [닫은]


111

어떤 있습니까 CSV의 C #에서 리더 / 라이터 라이브러리는?


68
나는 다를 것을 간청한다. 이것은 확실히 건설적인 질문이며 .net csv library. 내 주장에 대한 증거는 일화이지만 지난 6 년 동안이 질문이 22000 번 이상 조회되었다는 것입니다.
shovavnik

5
사실이 말했다
Robetto

답변:


107

CsvHelper를 사용해보십시오 . FastCsvReader만큼 사용하기 쉽고 쓰기도합니다. 나는 과거에 FastCsvReader에 매우 만족했지만, 또한 작성하는 것이 필요했고 FileHelpers에 만족하지 않았습니다.

독서:

var csv = new CsvReader( stream );
var myCustomTypeList = csv.GetRecords<MyCustomType>();

쓰기:

var csv = new CsvWriter( stream );
csv.WriteRecords( myCustomTypeList );

전체 공개 : 나는이 도서관의 저자입니다.


3
고마워, 조쉬. 나는 이것을 시도했고 그것은 빠르고 메모리 효율적이었습니다. 처음 사용하는 사용자에게는 문서가 약간 개선 될 수 있다고 생각하지만 확실히 충분했습니다.
Sam

테이블 그리드 (사용자 지정)를 반복하고 머리글을 작성한 다음 각 행 필드를 전달할 수 있도록 사용자 지정 형식없이이 라이브러리를 사용하는 방법이 있습니까? 파일의 오류를 방지하는 방법을 찾고 있습니다 (적절하게 이스케이프 처리 등).
u84six

예. 사용할 수 있습니다 WriteField. 여기에서 문서를 확인하세요 joshclose.github.io/CsvHelper
Josh Close

1
@Zimano 사실이 아닙니다. 개별 필드를 읽거나 행에 대한 문자열 배열을 가져올 수도 있습니다. 문서를 확인하십시오. joshclose.github.io/CsvHelper
Josh Close

@JoshClose 오, 반갑습니다, 감사합니다! 여기에서 시작 안내서 만 확인했습니다 : joshclose.github.io/CsvHelper/… 그리고 여기 에는 내 사용 사례가 포함되지 않았습니다. 좀 더 살펴 보았어야했는데 죄송합니다. 그러나 해당 페이지에서는 일종의 매핑을 사용하는 것이 CsvHelper. 아마도 그 자리에서 다른 읽기 전략을 제공 할 수 있을까요? 그건 그렇고 지금은 관련이
없기

21

프레임 워크 자체에는 몇 가지 옵션이 있습니다.

가장 쉬운 방법 중 하나는 Microsoft.VisualBasic을 참조한 다음 TextFieldParser 를 사용하는 것 입니다. 핵심 프레임 워크에서 완벽하게 작동하는 CSV 리더입니다.

또 다른 좋은 대안은 데이터 세트를 사용하여 CSV 파일을 읽는 것 입니다.


6
나는 항상 왜 그것이 Microsoft.VisualBasic 어셈블리에 있는지 궁금했습니다. MS는 C # 개발자가 CSV를 사용하지 않는다고 생각 했습니까?
Thomas Levesque

4
@Thomas : 특히 많은 C # 개발자들이 프로젝트에 VisualBasic 어셈블리를 포함하는 것에 대해

2
네-거기에 좋은 "굿즈"가 많이 있습니다. VB에는 원래 프레임 워크에서 실제로 고려되지 않은 일부 언어 구조가 있기 때문에 더 많은 것 같습니다. 그러나 VB6 사용자를 구현하지 않고서는 결코 사용할 수 없었을 것입니다. Devices 및 ApplicationServices 네임 스페이스에는 모든 종류의 유용한 항목이 있습니다.
Reed Copsey

20
@Roboto, 프로젝트에서 Microsoft.VisualBasic을 참조하는 C # 개발자는 무지한 언어 속물입니다. 더욱이 그들은 .NET을 전혀 이해하지 못합니다.
애쉬

3
또 다른 VB 어셈블리 gem은 CopyDirectory입니다. stackoverflow.com/questions/58744/…

17

Sebastien Lorion은 A Fast CSV ReaderCSV 라는 CodeProject에 대한 훌륭한 독자를 보유하고 있습니다. 아마도 C #에 가장 적합한 제품 중 하나이며 무료입니다.

쓰기에 관해서는 StreamWriter.

다음은 DataGridView파일 에 쓰기를위한 몇 가지 상용구 코드입니다 .

private void exportDGVToCSV(string filename)
{
    if (dataGridView1.Columns.Count != 0) 
    {    
        using (Stream stream = File.OpenWrite(filename))
        {
            stream.SetLength(0);
            using (StreamWriter writer = new StreamWriter(stream))
            {
                // loop through each row of our DataGridView
                foreach (DataGridViewRow row in dataGridView1.Rows) 
                {
                    string line = string.Join(",", row.Cells.Select(x => $"{x}"));
                    writer.WriteLine(line);
                }

                writer.Flush();
            }
        };
    }
}

2
이것이 제가 가장 좋아하는 것입니다. 아주 작은 도서관.
Alex

2
CSV 작성은 쉽습니다. 일반 텍스트 출력 방법을 사용하고 쉼표로 구분하십시오. 읽기를 위해서는 라이브러리 / 사용자 정의 처리기 만 있으면됩니다.
Reed Copsey

10
@Reed : 쉼표와 따옴표를 올바르게 이스케이프 처리하려면 너무 사소하지 않습니다. 이것에 대한 표준화가 있는지조차 확실하지 않지만 그렇게하는 것이 매우 일반적입니다.
Stefan Steinegger

26
CSV 작성은 그것보다 조금 더 복잡합니다. CSV 파일에 표현하려는 데이터에 쉼표 나 새 줄이 포함되어 있으면 데이터를 따옴표로 묶어야합니다. 새로 인용 부호가있는 데이터에 인용 부호가있는 경우 큰 따옴표로 인용 부호를 이스케이프해야합니다. 당신은 확실히 그 논리를 직접 코딩 할 수 있지만 라이브러리가 당신을 위해 그것을하는 것이 좋을 것입니다.
Tinister 2009

4
표준화는 RFC 4180입니다. tools.ietf.org/html/rfc4180
Josh Close

7

예-실제로 구체적인 사항을 요구하는 것 같지만?

FileHelpers 사용해보기


글쎄요,하지만 이상한 이유로 FileHelpers가 무작위로 고장났습니다. 또한 FileHelpers 라이브러리는 오랫동안 개발되지 않았습니다.
Erik Schierboom

1
FileHelpers는 현재 활발하게 개발되고 있습니다 . GitHub를 참조하세요 .
xmedeko

3

수십개가 있습니다.

http://www.filehelpers.net/ 은 가장 일반적인 방법 중 하나입니다.

일부 시나리오에서는 Filehelpers가 제한적이라고 생각하고 대신 The Fast CSV Reader를 사용 합니다. 내 경험상 CSV 파일의 형식을 모르거나 런타임까지 매핑을 가져 오지 않으면 이것이 사용하기에 더 나은 라이브러리입니다.


우리는 또한 파일 헬퍼를 사용합니다.
Tangurena 2009

1
FileHelpers를 구성하는 데 불편 함을 발견했습니다. FastCsvReader는 사용하기가 훨씬 쉬웠습니다.
Josh Close

FastCsvReader의 경우 +1. 뛰어난 성능. 그러나 주로 독자 / 파서입니다. 작가가 아닙니다.
Mehdi LAMRANI 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.