2016-03-09 10 views
5

मैं विजुअल स्टूडियो और सी # का उपयोग करके एक बहुत ही सरल विंडोज एप्लिकेशन बना रहा हूं जो फिल्मों के लिए उपशीर्षक फ़ाइलों को संपादित करता है। मैं एक प्रोग्राम चाहता हूं जो एक नहीं होने पर संवाद वाक्यों में एक स्थान जोड़ता है। उदाहरण के लिए:सी # - उच्चारण किए गए अक्षरों को कैसे बदलें, यानी, "-ई" "- É"

-हे, क्या हो रहा है?

-कुछ भी नहीं।

से

- अरे, क्या हो रहा है?

- कुछ भी नहीं।

मैंने सही फ़ाइल का चयन करने के लिए केवल एक बटन के साथ एक इंटरफेस बनाने के लिए टूलबॉक्स का उपयोग किया। - है, इस प्रकार एक स्थान बनाने 'ए'

private void button1_Click(object sender, EventArgs e) 
    { 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      string text = File.ReadAllText(openFileDialog1.FileName, Encoding.GetEncoding("iso-8859-1")); 
      text = text.Replace("-A", "- A"); 
      File.WriteAllText(openFileDialog1.FileName, text, Encoding.GetEncoding("iso-8859-1")); 
     } 
    } 

यह क्या करता है मूल रूप से के साथ "-एक" की जगह है: यह कोड मैं इस बटन के लिए है। यह वह समाधान है जिसके साथ मैं आया हूं और मैं प्रत्येक पत्र, सहित जैसे À, Á, È, É, आदि इत्यादि के साथ ऐसा करने की योजना बना रहा था,

यह काम नहीं करता है । अगर मैंने टेक्स्ट = टेक्स्ट रखा है। बदलें ("- É", "- É"); कार्यक्रम कुछ भी नहीं करता है।

मैं क्या जानना चाहता हूं कि मैं इसे कैसे ठीक कर सकता हूं।

पढ़ने के लिए धन्यवाद और यदि आपके आवेदन के लिए बेहतर विकल्प है तो कृपया मुझे बताने में संकोच न करें।

+0

आप 'अनुसंधान करने के लिए regex' की जरूरत है। आपको हर संभव पत्र के लिए मैन्युअल रूप से ऐसा करने की ज़रूरत नहीं है! – Blorgbeard

+0

'regex.Replace() ' – Harsh

+0

का उपयोग करें @ ब्लॉगरबीर्ड के रूप में, आप' text = new Regex ("^ -") के रूप में सरल कुछ करने में सक्षम हो सकते हैं। बदलें (टेक्स्ट, "-") ' – Rob

उत्तर

5

टिप्पणियों के लिए, Regex का उपयोग करें।

 var rx = new System.Text.RegularExpressions.Regex("^-([^ ])"); 
     ... in your loop 
     var text = rx.Replace(text, "- $1"); 

असल में यह क्या करता है कि यह स्ट्रिंग की शुरुआत में एक डैश की खोज करता है, लेकिन केवल एक स्थान के बाद नहीं होता है।() का अर्थ है कि डैश के बाद चार "सहेजा" होना चाहिए। प्रदान की गई स्ट्रिंग में प्रतिस्थापन की जगहों को प्रतिस्थापित करता है और एक डैश, एक स्पेस, और पहले मिलान किए गए समान वर्ण के साथ मिलान किए गए टेक्स्ट को प्रतिस्थापित करता है (doh!)। यह जो कुछ भी है।

स्रोत: https://xkcd.com/208/

संपादित करें: यदि आप एक पाश की जरूरत नहीं है, तो आप एक स्ट्रिंग एक फ़ाइल जिसमें हर पंक्ति एक उपशीर्षक लाइन को शामिल करना चाहिए की पूरी सामग्री युक्त है (सही?)। अगर ऐसा है, तो आप पंक्तियों की एक सूची के रूप में स्ट्रिंग के इलाज के लिए, इस रेगुलर एक्सप्रेशन को कॉन्फ़िगर कर सकते हैं:

 var rx = new Regex("^-([^ ])", RegexOptions.Multiline); 

एक उदाहरण के लिए इस बेला देखें: https://dotnetfiddle.net/ciFlAu

+0

आपको बहुत बहुत धन्यवाद। मेरे पास कुछ प्रश्न हैं: 1 - 'System.Text.RegularExpressions.Regex' ग्रे में दिखाई देता है और यदि मैं उस पर माउस को घुमाता हूं, तो यह कहता है "नाम सरलीकृत किया जा सकता है"। क्या यह बिल्कुल महत्वपूर्ण है? 2 - मुझे समझ में नहीं आया कि आपके 'लूप में' क्या मतलब है। मैं इस पर बहुत जानता था, मैंने कल सी # शुरू किया था। आपका कोड मेरे आवेदन पर काम नहीं करता है, इसने उपशीर्षक फ़ाइल को बिल्कुल नहीं बदला है। क्या आपको कोई विचार है क्यों? –

+0

1 - यदि आपके पास पहले से ही एक फ़ाइल का उपयोग कर रहा है। टेक्स्ट। रेगुलरएक्सप्रेस, आप फ़ाइल में पूरी तरह से योग्य नाम की आवश्यकता नहीं है। तो आप चिंता के बिना इसे सरल बना सकते हैं। 2 - अब मुझे एहसास है कि आपके कोड में लूप नहीं है। आपको रेगेक्स में कुछ विकल्प देना होगा। मुझे उनके बारे में जांचने दो। –

+0

आपका संपादन पूरी तरह से काम किया। आपको बहुत - बहुत धन्यवाद! यहां मैं दर्जनों लाइनों को लिखने वाला था, प्रत्येक संभावित पत्र के लिए, और आपने इसे केवल एक पंक्ति के साथ हल किया। अब वह दक्षता है! फिर से धन्यवाद। –

1

उच्चारण चिह्न चरित्र के लिए, इसके Unicode प्रतिनिधित्व का उपयोग करने का विचार करें:

string text = "-\u00C9"; //-É 
text = text.Replace("-\u00C9", "- \u00C9")); 

और तुम भी अंतरिक्ष बदलने के लिए विराम रहित स्पेस इस्तेमाल कर सकते हैं, अगर:

string text = "-\u00C9"; 
text = text.Replace("-\u00C9", "-\u00A0\u00C9")); 

तो फिर तुम UTF-8/UTF-16 का उपयोग कर सांकेतिक शब्दों में बदलना कर सकते हैं:

File.WriteAllText(openFileDialog1.FileName, text, Encoding.GetEncoding("UTF-8")); 
संबंधित मुद्दे