C # Замена строки / массива - PullRequest
       10

C # Замена строки / массива

0 голосов
/ 21 сентября 2018

это довольно сложно объяснить, но я постараюсь изо всех сил.

Поэтому я хочу иметь 3 текстовых поля.

TextBox 1 (вход): "X: Y: Z"

TextBox 2 (ввод): «A: B»

TextBox 3 (вывод):

Теперь для каждой строки я хочу сравнить Y и A. Каждая строка вTextBox1 выглядит следующим образом: «ABC: 123: DEF» теперь следует выделить 123 и сравнить его с A, который также отделен от B.

Если он равен, он должен выдаваться в TextBox3: X: B: Z Если нет, он не должен выдавать это в TextBox3.

ПРИМЕРЫ:

TB1: abc:123:def 
TB2: 123:bla 
TB3: abc:bla:def
------      
TB1: abc:741:def 
TB2: 345:bla 
TB3: no output

Вот что я получил:

private void button1_Click(object sender, EventArgs e)
{
    var textToReplace = textBox1.Text.Split(':');
    var replacementArray = textBox2.Text.Split(':');

    if (replacementArray.Length == 2)
    {
        textBox3.Clear();

        for (var i = 0; i < textToReplace.Length; i++)
        {
            if (i > 0)
            {
                textBox3.AppendText(":");
            }

            textBox3.AppendText(textToReplace[i].Replace(replacementArray[0], 
            replacementArray[1]));
        }
    }
}

IMG для 1 строкиработает:

Для первой строки это прекрасно работает, но не для следующего.Спасибо всем за ПОМОЩЬ!

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Я чувствую, что ваш код работает так, как вы хотите ... за исключением случаев, когда у него нет совпадений, он выводит исходную строку вместо "ничто".Так что добавь ...

if (textBox1.Text == textBox3.Text) 
    textBox3.Text = "";
0 голосов
/ 21 сентября 2018

Имеется словарь в текстовом поле 2, поэтому поместите его в один, а затем для каждой строки tb1 вы можете найти правильное значение.

string tb1 = @"abc:123:def
abc:741:def2
xxx:345:bla3";
string tb2 = @"123:bla
345:bla2";
string tb3="";

var repDic = new Dictionary<string,string>();
foreach(var line in tb2.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries))
{
    var spl = line.Split(':');
    if(!repDic.ContainsKey(spl[0]))
    {
        repDic.Add(spl[0],spl[1]);
    }
}

StringBuilder sb = new StringBuilder();
foreach(var line in tb1.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries))
{
    var spl = line.Split(':');
    string val;
    if(repDic.TryGetValue(spl[1],out val))
    {
        sb.AppendLine($"{spl[0]}:{val}:{spl[2]}");
    }

}
tb3 = sb.ToString();

TextBox3 Вывод:

abc:bla:def
xxx:bla2:bla3
0 голосов
/ 21 сентября 2018

Я не уверен, чего хочу достичь.Я понимаю это так:

  1. В текстовом поле 1 у вас есть строка с токеном, которую нужно заменить.

  2. В текстовом поле один у вас естьтокен и после : является сильным для вставки в месте токена.

  3. Текстовое поле 3 показывает результат.

В основном вы хотитесделать строку заменить.Я прав?

Пример кода:

var input = textBox1.Text;
var tokenArr = textBox2.Text.Split(":");
var output = input.Replace(tokenArr[0], tokenArr[1]);
textBox3.Text = output;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...