टेक्स्ट को पार्स करते समय मैं दो समस्याएं हल नहीं कर सकता हूं, मैं दायीं ओर से दूसरी तरफ कैसे पार्स कर सकता हूं?

यह वह वर्ग है जो पार्सिंग करता है:

public static string[] ParseText(string text, int startPos, int endPos)
{
            List parsedText = new List();
            string[] entries = null;

            if (startPos >= 0 && endPos > startPos)
            {
                string images = text.Substring(startPos + 1, endPos - startPos - 1);
                entries = images.Split(new[] { ',' });
                for (var i = 0; i < entries.Length; i++)
                {
                    entries[i] = entries[i].Replace("\"", "");
                }

                for (int i = 0; i < entries.Length; i++)
                {
                    parsedText.Add(entries[i]);
                }
            }
            return entries;
}

और फॉर्म 1 में:

private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
            if (e.Button == MouseButtons.Left)
            {
                if (mouseisup == false)
                {
                    textBox1.Text = "";
                    positionToSearch = richTextBox1.GetCharIndexFromPosition(new Point(e.X, e.Y));
                    richTextBox1.SelectionStart = positionToSearch;
                    textBox1.Text = richTextBox1.Text.Substring(positionToSearch, 1);
                    previousChar = positionToSearch;
                    textBox2.Text = "";
                    mouseisup = true;
                }
                else
                {
                    currentChar = richTextBox1.GetCharIndexFromPosition(new Point(e.X, e.Y));
                    if (currentChar > previousChar + 1)//currentChar < previousChar - 1)
                    {
                        richTextBox1.SelectionStart = currentChar;
                        textBox2.Text = richTextBox1.Text.Substring(currentChar, 1);
                        button1.Enabled = true;
                    }
                    mouseisup = false;
                } 
            }
}

private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
{
            if (textBox2.Text == "")
            {
                mouseisup = true;
                button1.Enabled = false;
            }
}

private void button1_Click(object sender, EventArgs e)
    {
        button1.Enabled = false;
        string[] text = Parse_Text.ParseText(richTextBox1.Text, positionToSearch, currentChar);
        for (int i = 0; i < text.Length; i++)
        {
            richTextBox2.Text = text[i];
        }
    }

अगर मेरे पास समृद्ध टेक्स्टबॉक्स 1 में टेक्स्ट है तो उदाहरण के लिए यह क्या करता है:

Daniel is greater > the the smaller < then >> higher is < Daniel

तो अगर मैं पहली बार पहली बार क्लिक करता हूं तो मैं दूसरे डी पर क्लिक करता हूं

RichTextBox2 में पाठ होगा:

aniel is greater > the the smaller < then >> higher is < 

If I click on i and then on >

तो RichTextBox2 में पाठ अब होगा:

s greater 

इस बिंदु तक सब कुछ अच्छा काम कर रहा है।

समस्या यह है कि जब मैं पिछड़ा क्लिक करता हूं उदाहरण के लिए मैं डैनियल के अंतिम डी पर क्लिक करता हूं और फिर मैं पहले डैनियल के डी पर क्लिक करता हूं।

तब से मुझे नई कक्षा में अपवाद मिल रहा है:

if (startPos >= 0 && endPos > startPos)

और फिर अविश्वसनीय प्रविष्टियां शून्य है।

जब मैं पिछड़ा पार्स करने की कोशिश करता हूं तो मैं इस मामले को कैसे संभाल सकता हूं? फॉर्म 1 में मैंने कुछ चीज की कोशिश की लेकिन मैं जांचता हूं कि टेक्स्टबॉक्स 2 खाली है या बूल को सच में कुछ सेट कर दिया है।

private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (textBox2.Text == "")
            {
                mouseisup = true;
                button1.Enabled = false;
            }
        }

चूंकि टेक्स्टबॉक्स 2 खाली है, यह हमेशा सत्य होगा। लेकिन मुझे यह जांचने की ज़रूरत है कि टेक्स्ट शून्य है या नहीं, वेरिएबल टेक्स्ट शून्य है तो कुछ करें:

private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            string[] text = Parse_Text.ParseText(richTextBox1.Text, positionToSearch, currentChar);

अगर मैं यहां जांचता हूं कि पाठ शून्य है और फिर टेक्स्टबॉक्स 2 खाली है तो यह बूल चर के हर समय सत्य होगा।

दूसरी समस्या यह है कि यदि मैं उपयोगकर्ता को दाएं से बाएं से पर्स करने की अनुमति देना चाहता हूं?

अगर मैं पहले डी और अंतिम डी को ठीक करता हूं तो ठीक है।

लेकिन अगर पहले मैं अंतिम डी पर क्लिक करता हूं और फिर पहला डी इसकी वापसी शून्य करता है।

तो दो समस्याएं:

  1. अगर कोड अब है तो शून्य प्रविष्टियों चर को कैसे संभालें? यदि यह शून्य है तो मैं चाहता हूं कि उपयोगकर्ता फिर से शुरू हो जाएगा।

  2. अगर मैं कोड बदलना चाहता हूं और दाएं से बाएं से पार्स करने की अनुमति देता हूं? नए वर्ग कोड में मुझे क्या बदलना चाहिए?

संपादित करें **

public static string[] ParseText(string text, int startPos, int endPos)
        {
            List parsedText = new List();
            string[] entries = null;
            int tempPos = 0;
            if (startPos > endPos)
            {
                tempPos = startPos;
                startPos = endPos;
                endPos = tempPos;
            }

            if (startPos >= 0 && endPos > startPos)
            {
                string images = text.Substring(startPos + 1, endPos - startPos - 1);
                entries = images.Split(new[] { ',' });
                for (var i = 0; i < entries.Length; i++)
                {
                    entries[i] = entries[i].Replace("\"", "");
                }

                for (int i = 0; i < entries.Length; i++)
                {
                    parsedText.Add(entries[i]);
                }
            }
            return entries;
        }

यह बटन क्लिक घटना है:

private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            string[] text = Parse_Text.ParseText(richTextBox1.Text, positionToSearch, currentChar);
            for (int i = 0; i < text.Length; i++)
            {
                richTextBox2.Text = text[i];
            }
        }
0
बटन क्लिक में मुझे पाठ के लिए जांच करनी चाहिए यदि यह शून्य है? कोशिश की लेकिन अगर यह शून्य है तो क्या करना है? मैं चाहता हूं कि अगर यह शून्य हो तो यह रीसेट की तरह होगा, इसलिए यदि मैं बाईं ओर एक चार पर क्लिक करता हूं तो यह इसे टेक्स्टबॉक्स 1 में जोड़ देगा और फिर से शुरू हो जाएगा। लेकिन चूंकि मैं बायीं तरफ बाईं तरफ अपने नल पर क्लिक करता रहता हूं। और चूंकि टेक्स्टबॉक्स 2 खाली है तो बूल माउसिसअप सत्य होगा।
जोड़ा लेखक Doron Muzar, स्रोत
डायलेक्टिकस किसी कारण से यह पूर्ण बटन क्लिक इवेंट कोड कॉपी नहीं करता है। मैं अब इसे अद्यतन कर रहा हूँ।
जोड़ा लेखक Doron Muzar, स्रोत
button1_Click में कुछ कोड गुम है।
जोड़ा लेखक Dialecticus, स्रोत
वर्तमान कोड संकलित नहीं होगा क्योंकि परिवर्तनीय i button1_Click में अनुपलब्ध है। साथ ही, कोड की आखिरी पंक्ति ब्रेसिज़ में घिरा हुआ है, लेकिन किसी भी प्रकार के अगर-के-उपयोग-उपयोग-प्रयास कथन में नहीं है, जो संदिग्ध है। कुछ कोड की तरह गायब है।
जोड़ा लेखक Dialecticus, स्रोत

1 उत्तर

2 का उत्तर बहुत आसान है, अगर startPos अंत से अधिक है तो फिर उन्हें स्वैप करें

if(startPos > endPos)
{
    tempPos = startPos;
    startPos = endPos;
    endPos = tempPos;
}

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

private void button1_Click(object sender, EventArgs e)
{
    button1.Enabled = false;
    string[] text = Parse_Text.ParseText(richTextBox1.Text, positionToSearch, currentChar);
    richTextBox2.Text = String.Join(Environment.NewLine, text);
}
0
जोड़ा
केवी मैंने अपने प्रश्न के साथ अपना प्रश्न अपडेट किया जो मैंने गलत किया था। क्या आप मुझे दिखा सकते हैं कि यह कैसे करें?
जोड़ा लेखक Doron Muzar, स्रोत