简体   繁体   中英

Get text between specific character

I want to get the text between ';' character. However if there are 3 matches like that, i want to get the text between ';' character where current cursor position. I am using multine textbox.

Example;

select * from database;

----> **Lets say my cursor is here** 
select 
orders from
customer;


select * from employees;

So, i only want to get ' select orders from customer ' text.

Could you please share your thoughts on it?

To achieve this, you first have to find all indicies of ; . To do this, iterate through all indicies ( source ):

private List<int> AllIndicesOf(string strToSearch, string fullText)
{
    List<int> foundIndices = new List<int>();
    for (int i = fullText.IndexOf(strToSearch); i > -1; i = fullText.IndexOf(strToSearch, i + 1))
    {
        foundIndices.Add(i + 1);
    }
    return foundIndices;
}

Then you have to compare your position to those indices, since you only want the index (of ; ) that follows immediately after your cursor:

List<int> indicies = AllIndicesOf(";", txtBxText.Text);
try
{
    if (indicies.Count > 0)
    {           
        int cursorPos = txtBxText.SelectionStart;
        var indicesBefore = indicies.Where(x => x < cursorPos);
        int beginIndex = indicesBefore.Count() > 0 ? indicesBefore.Last() : 0;
        int endIndex = indicies.Where(x => x > beginIndex).First();
        txtBxSelected.Text = txtBxText.Text.Substring(beginIndex, endIndex - beginIndex);
    }
}
catch { }

The try-catch statement is used to prevent an Exception if your cursors position is after all other indices.

A sample project can be downloaded here .

This solution perfectly works although you need to check it again and consider some possible exceptions. I did not consider them myself because I thought it was better to be handled by you. I also used richTextBox which is better than the multi line text box. Enjoy the code bro

 private void button1_Click(object sender, EventArgs e)
        {
            var ultimateResult = string.Empty;
            var cusrPosition = richTextBox1.SelectionStart;
            var currentStr = string.Empty;
            var strDic = new Dictionary<string,int>();                
            var textArr = richTextBox1.Text.ToCharArray();
            for (var i = 0; i < textArr.Count(); i++)
            {
                if (textArr[i] != ';')
                    currentStr = currentStr + textArr[i];
                else
                {
                    strDic.Add(currentStr,i);
                    currentStr = string.Empty;

                }
            }
            ultimateResult = strDic.First(item => item.Value >= cusrPosition).Key;
            textBox1.Text = ultimateResult;

        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM