2011-01-03 4 views
2

FileHelpers를 통해 CSV를 동적으로 읽고 CSV 데이터를 데이터 테이블로 사용하려고합니다. 내 CSV 파일이 동일하지 않습니다. 서로 다른 열 머리글과 다른 양의 열을 갖습니다. ReadStreamAsDT 메서드를 사용하고 있지만 FileHelperEngine을 초기화하는 구조화 된 클래스가 필요합니다. 어떤 아이디어?ReadStreamAsDT - Filehelpers 및 C# - filehelpers를 사용하여 CSV를 동적으로 읽으려면 어떻게해야합니까?

+0

"내 CSV 파일이 동일하지 않습니다"라고 말하면 각 CSV 파일에 고유 한 정의가 있거나 CSV 파일의 각 레코드가 잠재적으로 다를 수 있음을 의미합니까? –

+0

혹시 이것을 알아 냈습니까? 나는 구체적인 객체를 제공하지 않고 엔진을 인스턴스화하는 방법을 찾을 수없는 것처럼 보입니다. 난 그냥 CSV 파일을 일반적인 데이터베이스에 끌어 오기를 원한다. –

답변

4

파일에서 DataTable을 만들려면 FileHelpers.RunTimeDelimitedClassBuilder을 사용해야했습니다. 여기 내 방법이 있습니다. 시간이 더 많이 걸리면 나는 이것을 더 잘 설명 할 것이다.

private static DataTable CreateDataTableFromFile(byte[] importFile) { 
    var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," }; 
    var ms = new MemoryStream(importFile); 
    var sr = new StreamReader(ms); 
    var headerArray = sr.ReadLine().Split(','); 
    foreach (var header in headerArray) { 
     cb.AddField(header, typeof(string)); 
     cb.LastField.FieldQuoted = true; 
     cb.LastField.QuoteChar = '"'; 
    } 
    var engine = new FileHelperEngine(cb.CreateRecordClass()); 
    return engine.ReadStreamAsDT(sr); 
} 

물론, 거기에 다른 논리가이 방법을 주위에 일어나고과 함께 검증의 많은,하지만 난 그것으로 다이빙 지금 시간이별로 없습니다. 희망이 도움이!

+0

동일한 접근 방식을 사용하고 있지만 파일 크기가 클 경우 "메모리 부족 예외"가 발생합니다. –

관련 문제