2011-04-22 9 views
11

का उपयोग कर CSV फ़ाइल आयात करने में समस्या मैं डेटाबेस तालिका में csv फ़ाइलों को आयात करने के लिए FileHelpers लाइब्रेरी का उपयोग कर रहा हूं। मुझे उस फ़ाइल को आयात करने में कोई समस्या है जिसमें फ़ाइल हैडर में संख्या ('800NUMBER') से शुरू होने वाला फ़ील्ड है। आयात करने के लिएफ़ाइलहेल्पर

कोड:
DataTable data = CommonEngine.CsvToDataTable(file, ',');

अपवाद:
FileHelpers.FileHelpersException: The string '800NUMBER' not is a valid .NET identifier. at FileHelpers.RunTime.FieldBuilder..ctor(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.CsvClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName) at FileHelpers.RunTime.CsvClassBuilder..ctor(CsvOptions options) at FileHelpers.CsvEngine.CsvToDataTable(String filename, String classname, Char delimiter, Boolean hasHeader) at FileHelpers.CommonEngine.CsvToDataTable(String filename, Char delimiter)

मैं अगर वहाँ की तरह '[800NUMBER]' कॉलम नाम से बचने के लिए एक रास्ता है यकीन नहीं है।

कॉलम नाम बदला नहीं जा सकता है क्योंकि क्लाइंट हमें यह तरीका प्रदान करता है।

धन्यवाद,
-Oleg


'डेटा' पंक्तियों से अलग से पढ़ने 'शीर्षक' पंक्ति करके इस समस्या को हल। फिर, मैं 'डेटा' में कॉलम नाम बदलता हूं और डेटाबेस में आयात करने के लिए SqlBulkCopy का उपयोग करता हूं।

FileHelpers.CsvOptions options = new FileHelpers.CsvOptions("ImportRecord", ',', file); 
    options.HeaderLines = 0;   

    FileHelpers.CsvEngine engine = new FileHelpers.CsvEngine(options); 

    engine.Options.IgnoreFirstLines = 0; 
    DataTable header = engine.ReadStringAsDT(FileHelpers.CommonEngine.RawReadFirstLines(file, 1)); 

    engine.Options.IgnoreFirstLines = 1; 
    DataTable data = engine.ReadFileAsDT(file); 

    for (int i = 0; i < header.Columns.Count; i++) 
     data.Columns[i].ColumnName = header.Rows[0][i].ToString(); 

उत्तर

2

फाइलहेल्पर के स्रोत को देखते हुए, कॉलम नाम बदलने के अलावा आप इस बारे में ज्यादा कुछ नहीं कर सकते हैं। हालांकि, आप C# फ़ील्ड बनाने से पहले CSV फ़ील्ड नाम को सजाने के लिए फ़ाइलहेल्पर को आसानी से बदल सकते हैं।

बेशक

, सीएसवी दुनिया के सबसे जटिल प्रारूप नहीं है - यदि आप जानते हैं आप बच गए अल्पविराम के से निपटने के लिए नहीं है, तो String.Split(',', myLine) अक्सर काफी आप सभी की जरूरत है। व्यक्तिगत रूप से मुझे संदेह है कि मैं सीएसवी फाइलों को पढ़ने के लिए तीसरी पार्टी निर्भरता की परेशानी का परिचय दूंगा।

+5

के साथ पार्सिंग सीएसवी .plit() सिर्फ समस्याओं के लिए पूछ रहा है। – Patonza