Несколько условий замены в одном кубике

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Работаю в немецким текстом, в котором иногда нужно делать замену спецсимволов по всему тексту:

Ä на AE
ä на ae
Ö на OE
ö на oe
Ü на UE
ü на ue
ß на ss

Понятно, что можно сделать 7 последовательных кубиков, в каждом прописать эти условия замены.
Но получается наляписто.
Может можно как-то в один кубик все уместить?
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Вот попробуй этот сниппет переделай
Код:
// с английского на русский рандом
var input = project.Variables["text"].Value;
int persent = 100; //процент замен
var ld = new Dictionary<char, char> {{'3', 'З'}, {'a', 'а'}, {'A', 'А'}, {'B', 'В'}, {'c', 'с'}, {'C', 'С'}, {'e', 'е'}, {'E', 'Е'}, {'H', 'Н'}, {'k', 'к'}, {'K', 'К'}, {'M', 'М'}, {'o', 'о'}, {'O', 'О'}, {'p', 'р'}, {'P', 'Р'}, {'T', 'Т'}, {'x', 'х'}, {'X', 'Х'}, {'y', 'у'}, {'b', 'ь'}, };
var pos = new List<int>();
for(int i = 0; i <input.Length; i++){
    if(ld.ContainsKey(input[i]))
        pos.Add(i);
}
pos.Shuffle();
pos = pos.GetRange(0, (pos.Count)*persent/100);
var inarray = input.ToCharArray();
foreach(var p in pos){
    project.SendInfoToLog(inarray[p] +" на "+ ld[inarray[p]], p.ToString()+".меняем");
    inarray[p] = ld[inarray[p]];
}
return new string(inarray);
 
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Переделал вот так:

Код:
// с английского на русский рандом
var input = project.Variables["text"].Value;
int persent = 100; //процент замен
var ld = new Dictionary<char, char> {{'Ä', 'AE'}, {'ä', 'аe'}, {'Ö', 'OE'}, {'ö', 'oe'}, {'Ü', 'UE'}, {'ü', 'ue'}, {'ß', 'ss'}, };
var pos = new List<int>();
for(int i = 0; i <input.Length; i++){
    if(ld.ContainsKey(input[i]))
        pos.Add(i);
}
pos.Shuffle();
pos = pos.GetRange(0, (pos.Count)*persent/100);
var inarray = input.ToCharArray();
foreach(var p in pos){
    project.SendInfoToLog(inarray[p] +" на "+ ld[inarray[p]], p.ToString()+".меняем");
    inarray[p] = ld[inarray[p]];
}
return new string(inarray);

Выдает такие ошибки:

Ошибка в действии "CS1012" "Too many characters in character literal". [Строка: 3; Cтолбец: 44]
Ошибка в действии "CS1012" "Too many characters in character literal". [Строка: 3; Cтолбец: 57]
Ошибка в действии "CS1012" "Too many characters in character literal". [Строка: 3; Cтолбец: 70]

и т.д.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 183
Баллы
113
Потому что там только одно-буквенная замена работает. Лучше вот код
C#:
string str = project.Variables["text"].Value;
str = str.Replace("Ä", "AE")
        .Replace("ä", "аe")
        .Replace("Ö", "OE")
        .Replace("ö", "oe")
        .Replace("Ü", "UE")
        .Replace("ü", "ue")
        .Replace("ß", "ss");
return str;
Ставим лайк оригиналу.
 
  • Спасибо
Реакции: Atlas и Enigma

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Не нужно маленькие прописывать
Код:
string str = "Ä,ä,Ö,ö,Ü,ü";
Dictionary<string, string> Rpl = new Dictionary<string, string>()          
{              
    {"Ä", "AE"},          
    {"Ö", "OE"},              
    {"Ü", "UE"}
              
};
foreach(var r in Rpl)
{
    str = str.Replace(r.Key, r.Value).Replace(r.Key.ToLower(), r.Value.ToLower());
}
return str;
 
Последнее редактирование:
  • Спасибо
Реакции: Enigma и Roman*

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Благодарю за помощь!
 

Atlas

Client
Регистрация
16.02.2014
Сообщения
131
Благодарностей
8
Баллы
18
Потому что там только одно-буквенная замена работает. Лучше вот код
C#:
string str = project.Variables["text"].Value;
str = str.Replace("Ä", "AE")
        .Replace("ä", "аe")
        .Replace("Ö", "OE")
        .Replace("ö", "oe")
        .Replace("Ü", "UE")
        .Replace("ü", "ue")
        .Replace("ß", "ss");
return str;
Ставим лайк оригиналу.
А можно в этот код добавить замену по регулярке?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 183
Баллы
113
А можно в этот код добавить замену по регулярке?
Regex.Replace(str, "текст", "test");
C#:
string str = project.Variables["text"].Value;
str = str.Replace("Ä", "AE")
        .Replace("ä", "аe")
        .Replace("Ö", "OE")
        .Replace("ö", "oe")
        .Replace("Ü", "UE")
        .Replace("ü", "ue")
        .Replace("ß", "ss");
str = System.Text.RegularExpressions.Regex.Replace(str, @"тут регулярка для замены", "тут на что заменять");
return str;
 
  • Спасибо
Реакции: impul5e и Atlas

Atlas

Client
Регистрация
16.02.2014
Сообщения
131
Благодарностей
8
Баллы
18
Потому что там только одно-буквенная замена работает. Лучше вот код
C#:
string str = project.Variables["text"].Value;
str = str.Replace("Ä", "AE")
        .Replace("ä", "аe")
        .Replace("Ö", "OE")
        .Replace("ö", "oe")
        .Replace("Ü", "UE")
        .Replace("ü", "ue")
        .Replace("ß", "ss");
return str;
Ставим лайк оригиналу.
Здесь во второй строке русская a :-) https://gyazo.com/9b2fd1ac6c329804fcde70f4986d7e89
 
  • Спасибо
Реакции: orka13

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)