2012-10-05 13 views
8

मैंने डबल कोट्स को हटाने से संबंधित कुछ प्रश्न यहां देखे हैं। लेकिन यह मेरे मुद्दे को हल नहीं किया। उन्होंने प्रतिस्थापन या ट्रिम कार्यों का उपयोग करने के लिए कहा। मैंने इस्तेमाल किया लेकिन समस्या बनी हुई है।तारों से डबल कोट्स को हटाना चाहते हैं

मेरे कोड:

DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath); 
     string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX"; 
     StreamWriter wrtr = null; 
     wrtr = new StreamWriter(targetPath); 
     for (int x = 0; x < dt.Rows.Count; x++) 
     { 
      string rowString = ""; 
      for (int y = 0; y < dt.Columns.Count; y++) 
      { 
       if (y == dt.Columns.Count - 1) 
       { 
        rowString += "\"" + dt.Rows[x][y].ToString() + "\""; 
       } 
       else 
       { 
        rowString += "\"" + dt.Rows[x][y].ToString() + "\"~"; 
       } 
      }   
      rowString.Replace('"', ' ').Trim(); 
      wrtr.WriteLine(rowString); 
     } 
     wrtr.Close(); 
     wrtr.Dispose(); 

मैं उपरोक्त कोड में rowString.Replace('"', ' ').Trim(); का उपयोग करके की कोशिश की। लेकिन डबल कोट्स मौजूद हैं क्योंकि यह है। मुझे एक समाधान साबित करें। धन्यवाद।

+0

मुझे संदेह है कि क्या आप अन्य प्रश्नों * सावधानी से उत्तर में जवाब पढ़ते हैं, तो आपको जवाब मिल जाएगा ... ध्यान दें कि संसाधनों का निपटान करने के लिए आपको 'उपयोग' कथन का भी उपयोग करना चाहिए, भले ही कोई हो अपवाद। –

उत्तर

22

आप rowString करने के लिए इसे वापस सौंपने होंगे:

rowString = rowString.Replace('"', ' ').Trim(); 

Stringsimmutable हैं।

row.String.Replace(...) आपको एक स्ट्रिंग वापस कर देगा, क्योंकि आप इसे कुछ भी निर्दिष्ट नहीं कर रहे हैं, इसे छोड़ दिया जाएगा। यह मूल rowString ऑब्जेक्ट को नहीं बदलेगा।

आप या "" का उपयोग कर सकते हैं ताकि रिक्त स्ट्रिंग के साथ डबल कोट्स को प्रतिस्थापित किया जा सके, एकल स्थान ' ' के बजाय। तो अपने बयान होना चाहिए:

rowString = rowString.Replace("\"", string.Empty).Trim(); 

(, एक स्ट्रिंग"\"" रूप दोहरे उद्धरण पारित करने के लिए के बाद से string.Empty साथ विधि अधिभार प्रकार स्ट्रिंग की होने के लिए दोनों मानकों की आवश्यकता होगी याद रखें)।

आप अंत में Trim() से छुटकारा पाने के कर सकते हैं, यदि आप string.Replace शुरुआत या स्ट्रिंग के अंत में के दौरान जोड़ने रिक्त स्थान निकालने का प्रयास कर रहे थे।

+3

यह उत्तर बेहतर होगा यदि आप समझाएंगे * क्यों * ... –

+0

@ जोनस्केट, मैं लगभग :) :) अब संशोधित – Habib

+0

@ हाबीब, यह ठीक काम करता है लेकिन रिक्त स्थान को कैसे हटाया जाए। कृपया मदद करे। धन्यवाद। –

0

इस पंक्ति में एक त्रुटि है।

rowString.Replace('"', ' ').Trim(); 

चूंकि दोनों प्रतिस्थापन और ट्रिम एक स्ट्रिंग देता है तो आपको इसे एक चर के लिए असाइन करने की आवश्यकता होती है। स्ट्रिंग को असाइन नहीं करके आप प्रतिस्थापन और ट्रिम विधियों द्वारा उत्पन्न मान को खो देंगे।

var myString = rowString.Replace('"', ' ').Trim(); 
//Or 
rowString = rowString.Replace('"', ' ').Trim(); 
0

वीबी में आप इस कोशिश करनी चाहिए:

Replace("""", ""); 

लेकिन सी # में आप इस कोशिश करनी चाहिए:

Replace("\"", ""); 
+1

यही कारण है कि डबल-कोट्स अभी भी वहां हैं, हालांकि ... –

0

rowString.Replace('"', ' ') एक नया स्ट्रिंग वस्तु बनाता है और मौजूदा स्ट्रिंग वस्तु को संशोधित नहीं इसलिए आपको नव निर्मित स्ट्रिंग ऑब्जेक्ट को एक अलग चर पर असाइन करना होगा या अपने मौजूदा चर को ओवरराइट करना होगा।

rowString=rowString.Replace('"', ' ').Trim()  
or 
var somestring=rowString.Replace('"', ' ').Trim() 
0

जैसा हबीब ने उल्लेख किया है, स्ट्रिंग्स अपरिवर्तनीय हैं। किसी भी स्ट्रिंग मैनिपुलेशन को रीप्लेस, रिवर्स इत्यादि जैसे मैनिप्लेटेड डेटा के साथ वापस सेट करने की आवश्यकता है ....

तो अपने वांछित व्यवहार को प्राप्त करने के लिए प्रतिस्थापित स्ट्रिंग को असाइन करने का प्रयास करें।

15

ट्रिम किसी भी चरित्र को हटा सकता है, न केवल सफेद जगह।

myString = myString.Trim('"'); 

http://msdn.microsoft.com/en-us/library/d4tt83f9%28v=vs.110%29.aspx

+0

यह कोड संकलित नहीं करता है। –

+0

@GenaVerdel इसका उपयोग करने से पहले चर को परिभाषित करने का प्रयास करें? यह सी # 2.0 और उच्चतर के साथ काम करेगा। – pants

+3

यह स्वीकार्य उत्तर – Steve

0

आपका मुद्दा एक आम गलती है।

rowString = rowString.Replace('"', ' ').Trim(); 

एक चर (rowString =) करने के लिए अपने परिणाम वापस जाने के लिए सुनिश्चित करें: यहाँ आप क्या करने की जरूरत है। यदि आप ऐसा नहीं करते हैं, तो सी # अभी भी विधियों को चलाएगा लेकिन यह चर को संशोधित नहीं करेगा। यह किसी भी immutable objects के साथ मामला है।

उदाहरण:

rowString.Replace('"', ' ').Trim(); 

नहीं वास्तविक rowString वस्तु को संशोधित करेगा।

rowString = rowString.Replace('"', ' ').Trim(); 

सही पर कोड का परिणाम के साथ rowString के पुराने मूल्य बदल देता है।

मैंने यह उत्तर लिखा और अभी महसूस किया कि हबीब ने उपरोक्त वही चीज़ समझाई है। :)

संबंधित मुद्दे