2012-02-01 8 views
17

का उपयोग कर सीएसवी पढ़ने के दौरान पहली पंक्ति को कैसे छोड़ें मेरे पास सीएसवी फ़ाइल से मूल्यों को पढ़ने और कुछ प्रोसेसिंग करने के लिए मेरा निम्नलिखित कोड है। मैं इनपुट सीएसवी फ़ाइल की पहली पंक्ति को छोड़ना चाहता हूं क्योंकि इसमें हेडर टेक्स्ट है लेकिन प्रसंस्करण के बाद मैं इसे वापस जोड़ना चाहता हूं।स्ट्रीमreader

List<string> values = new List<string>(); 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    while (sr.Peek() != -1) 
    { 
     string line = sr.ReadLine(); 
     List<string> lineValues = line.Split(',').ToList(); 
     var tempMinInt = 1; 
     var tempValue = 1; 
     var tempValInt = Convert.ToInt32(lineValues[4]); 
     if (lineValues[3] == "1876") 
     { 
      if (tempValInt % 60 != 0) 
      { 
       tempMinInt = (tempValInt/60) + 1; 
       tempValue = tempMinInt * 30; 
      } 
      else 
      { 
       tempMinInt = tempValInt/60; 
       tempValue = tempMinInt * 30; 
      } 
     } 
     else if (lineValues[3] == "1875") 
     { 
      if (tempValInt != 0) 
      { 
       tempValue = 500; 
      } 
      else 
       tempValue = 0; 
     } 

     if (lineValues[3] == "1876") 
     { 
      values.Add(string.Join(",", lineValues) + "," + "0" + "," + "30" + "," + tempValue.ToString()); 
     } 
     else if (lineValues[3] == "1875") 
     { 
      values.Add(string.Join(",", lineValues) + "," + "1" + "," + "500" + "," + tempValue.ToString()); 
     } 

    } 
} 

नमूना इनपुट सीएसवी इस तरह दिखता है:

id, datetime, msisdn, num, duration 
33083,2011-12-19 05:17:57+06:30,98590149,1875,258 
33084,2011-12-19 05:22:28+06:30,98590149,1875,69 
33085,2011-12-19 05:23:45+06:30,98590149,1875,151 
33086,2011-12-19 05:30:21+06:30,98590149,1875,58 
33087,2011-12-19 06:44:19+06:30,949826259,1875,66 

और मैं करने के लिए इस तरह मेरी उत्पादन करना चाहते हैं: इससे पहले कि आप पाश में मिल

id, datetime, msisdn, num, duration, type, ammount, total 
33083,2011-12-19 05:17:57+06:30,98590149,1875,258,1,500,500 
33084,2011-12-19 05:22:28+06:30,98590149,1875,69,1,500,500 
33085,2011-12-19 05:23:45+06:30,98590149,1875,151,1,500,500 
33086,2011-12-19 05:30:21+06:30,98590149,1875,58,1,500,500 

उत्तर

39

बस पहले इसे पढ़ । मैं यह करने के चाहते हैं:

using (StreamReader sr = new StreamReader(filePath)) 
{ 
    string headerLine = sr.ReadLine(); 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     ... 
    } 
} 

(मैं नज़र का उपयोग कर, व्यक्तिगत रूप से पसंद नहीं है।)

फिर जब आप उत्पादन को लिखने, headerLine साथ शुरू करते हैं।

1

आप अपने समय के लूप से पहले पहली पंक्ति पढ़ सकते हैं और इसे स्टोर कर सकते हैं, या आप फ़ाइल में कहां हैं, यह जांचने के लिए आप काउंटर/बूलियन फ़ील्ड का उपयोग कर सकते हैं।

11

बस पहली पंक्ति पढ़ सकते हैं और इसके साथ कुछ भी नहीं ...

List<string> values = new List<string>(); 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    sr.ReadLine(); 
    while (sr.Peek() != -1) 
    { 
     string line = sr.ReadLine(); 
     List<string> lineValues = line.Split(',').ToList(); 

     //***// 
    } 
} 
3

कुछ इस तरह:

bool isFirst=true; 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    while (sr.Peek() != -1) 
    { 
     if(isFirst) 
     { 
      isFirst=false; 
      continue; 
     } 
    } 
}