Вот код кнопки
private void Processing_Click(object sender, RoutedEventArgs e)
{
string before = textboxBeforeProcessing.Text;//Сохранение текста в переменной
string[] words = before.Split(new char[] { ' ' });//Разбор текста на слова
for (int i = 0; i < words.Length; i++)//Добавление одинарных кавычек
{
textboxPostProcessing.Text += "'" + words[i] + "'";
}
}
Объявление TextBox -ов
<TextBox Name="textboxBeforeProcessing" Grid.Row="0" Grid.Column="0" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" AcceptsReturn="True">
</TextBox>
<TextBox Name="textboxPostProcessing" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" AcceptsReturn="True" >
</TextBox>
Как сделать так, чтобы кавычки текста колонкой проставлялись так же, как и у построчного текста?
Проблема не в TextBox-ах и вообще не в WPF, по крайней мере не только в них. Проблема в обработке строк, ее можно воспроизвести в консольном приложении:
var before = "hello world\nnext line";
Console.WriteLine("Before: ");
Console.WriteLine(before);
var after = "";
string[] words = before.Split(new char[] { ' ' });//Разбор текста на слова
for (int i = 0; i < words.Length; i++)//Добавление одинарных кавычек
{
after += "'" + words[i] + "'";
}
Console.WriteLine("After: ");
Console.WriteLine(after);
Выводит:
Before:
hello world
next line
After:
'hello''world
next''line'
Как видите, код не обернул перенос строки в кавычки. Это происходит потому что Вы разбиваете строку по пробелу, а перенос строки им не является.
Для того чтобы разбить строку не только по пробелам используйте вызов String.Split()
, который согласно документации разбивает строку по любым пробельным символам:
If the separator argument is null or contains no characters, the method treats white-space characters as the delimiters.
Если в примере выше использовать:
string[] words = before.Split()
, то вывод уже будет:
Before:
hello world
next line
After:
'hello''world''next''line'
Кавычки проставились нормально, но строки слепились в одну. Если это устраивает, то ОК. Если нет, то придется изменить обработку и самому отслеживать где в строке есть переносы строк и заменить их на сочетание «кавычка + перенос строки». Это можно сделать циклом, можно заменой по строке. В качестве альтернативы можно обрабатывать строки входного TextBox-а по одной через какой-нибудь GetLineText
.
Для соединения строк опять-таки вместо цикла можете использовать String.Join
передавая разделитель "''"
или даже "','"
. Нужно будет добавить разделителей спереди и сзади, но это мелочи.
А вообще большинство нормальных текстовых редакторов поддерживают поиск и замену по регулярному выражению. С их помощью такого рода задачи (обернуть слова в кавычки с разделителем) решаются довольно легко.
Для примера если мы в Notepad++ имеем такой текст:
, то с помощью замены по регулярному выражению:
можно обернуть все слова (последовательности без пробелов) в кавычки:
В общем, учите регулярные выражения и возможности Вашего редактора/среды, так сэкономите время на написание кода. Если еще какой-нибудь скриптовый язык выучите то Вас вообще никто не остановит :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Разбираюсь в c# в частности с делегатами, возник вопрос зачем нужны делегаты если можно создать экземпляр класса и вызвать метод
Не получается настроить references в MySQL, не понимаю что делаю не правильно