Числа в буквы

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
Есть ряд чисел (числа в ряду могут манятся местами), например 1 2 3 4 5 6 7 8 9 10 11 необходимо преобразовать в буквы где 1=b 2=c ... 10=k 11=i
пробовал так
string number = project.Variables["number_2"].Value;
number = number.Replace("1", "b");
number = number.Replace("2", "c");
number = number.Replace("3", "d");
number = number.Replace("4", "e");
number = number.Replace("5", "f");
number = number.Replace("6", "g");
number = number.Replace("7", "h");
number = number.Replace("8", "i");
number = number.Replace("9", "j");
number = number.Replace("10", "k");
number = number.Replace("11", "l");
return number;

на выходе получил "b c d e f g h i j b0 bb"
как получить на выходе "b c d e f g h j k l" ?
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
Есть ряд чисел (числа в ряду могут манятся местами), например 1 2 3 4 5 6 7 8 9 10 11 необходимо преобразовать в буквы где 1=b 2=c ... 10=k 11=i
пробовал так
string number = project.Variables["number_2"].Value;
number = number.Replace("1", "b");
number = number.Replace("2", "c");
number = number.Replace("3", "d");
number = number.Replace("4", "e");
number = number.Replace("5", "f");
number = number.Replace("6", "g");
number = number.Replace("7", "h");
number = number.Replace("8", "i");
number = number.Replace("9", "j");
number = number.Replace("10", "k");
number = number.Replace("11", "l");
return number;

на выходе получил "b c d e f g h i j b0 bb"
как получить на выходе "b c d e f g h j k l" ?
Если задача именно такая как Вы говорите, ряд чисел разбит пробелами, тогда можно решить таким образом:
C#:
var dic = new Dictionary<string, string>();
    dic["1"] = "b";
    dic["2"] = "c";
    dic["3"] = "d";
    dic["4"] = "e";
    dic["5"] = "f";
    dic["6"] = "g";
    dic["7"] = "h";
    dic["8"] = "i";
    dic["9"] = "j";
    dic["10"] = "k";
    dic["11"] = "l";
    
string line = "1 2 3 4 5 6 7 8 9 10 11 12"; // = project.Variables["number_2"].Value;
string[] chars = line.Split(new[]{" "}, StringSplitOptions.RemoveEmptyEntries).ToArray();

for(int i =0;i<chars.Length;i++) {
    string ch = chars[i];
    try {       
        chars[i] =  dic[ch];
    }
    catch {
        project.SendWarningToLog("Не известное число - замена не производится");
    }
}
return string.Join(" ", chars);
Заведомо добавил не известное число 12, которое не нужно заменять (его нет в словаре - пропускаем).
99119
 
  • Спасибо
Реакции: ledsan и Alex.A

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
Если задача именно такая как Вы говорите, ряд чисел разбит пробелами, тогда можно решить таким образом:
C#:
var dic = new Dictionary<string, string>();
    dic["1"] = "b";
    dic["2"] = "c";
    dic["3"] = "d";
    dic["4"] = "e";
    dic["5"] = "f";
    dic["6"] = "g";
    dic["7"] = "h";
    dic["8"] = "i";
    dic["9"] = "j";
    dic["10"] = "k";
    dic["11"] = "l";
   
string line = "1 2 3 4 5 6 7 8 9 10 11 12"; // = project.Variables["number_2"].Value;
string[] chars = line.Split(new[]{" "}, StringSplitOptions.RemoveEmptyEntries).ToArray();

for(int i =0;i<chars.Length;i++) {
    string ch = chars[i];
    try {      
        chars[i] =  dic[ch];
    }
    catch {
        project.SendWarningToLog("Не известное число - замена не производится");
    }
}
return string.Join(" ", chars);
Заведомо добавил не известное число 12, которое не нужно заменять (его нет в словаре - пропускаем).
Посмотреть вложение 99119
Спасибо огромное, вставил код поставил свою переменную в код
var dic = new Dictionary<string, string>();
dic["1"] = "b";
dic["2"] = "c";
dic["3"] = "d";
dic["4"] = "e";
dic["5"] = "f";
dic["6"] = "g";
dic["7"] = "h";
dic["8"] = "i";
dic["9"] = "j";
dic["10"] = "k";
dic["11"] = "l";

string line = project.Variables["number"].Value;
string[] chars = line.Split(new[]{" "}, StringSplitOptions.RemoveEmptyEntries).ToArray();

for(int i =0;i<chars.Length;i++) {
string ch = chars;
try {
chars = dic[ch];
}
catch {
project.SendWarningToLog("Не известное число - замена не производится");
}
}
return string.Join(" ", chars);
 

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
но почему то на число 11 ругается
99122


p/s попробовал другие числа ставить взамен 11, ругается на любое число которое последнее
99123
 
Последнее редактирование:

THE CaHeK

Client
Регистрация
29.01.2016
Сообщения
293
Благодарностей
115
Баллы
43
99128


У вас ругается потому что каждое число, которое вы хотите заменять, нужно добавить в dictionary.

C#:
dic["11"] = "a11";

dic["12"] = "a12";

dic["13"] = "a13";

//И так далее...
 
Последнее редактирование:
  • Спасибо
Реакции: ledsan и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
но почему то на число 11 ругается
Посмотреть вложение 99122

p/s попробовал другие числа ставить взамен 11, ругается на любое число которое последнее
Посмотреть вложение 99123
P.S. В конце сообщения код - обратите внимание на 19 строку и сравните с своим кодом.

Проверил с разными ситуациями несколько раз.
Никто ничего не ругается - если число не указано в словаре - то оно просто не заменяется (оставляется то что было).
Примеры в скриншотах ниже (приложил к сообщению).
Если что-то не корректно - объясните более подробно, может я действительно не понял задачу...

Спасибо огромное, вставил код поставил свою переменную в код
C#:
// здесь Ваш код - форум его исказил.. - я его удалил
Пожалуйста, обратите внимание на то, что Ваш код (который Вы бросили выше) отличается от того, который у меня.
Обратите внимание на 19 строку - у Вас там не так как у меня.:
var dic = new Dictionary<string, string>();
    dic["1"] = "b";
    dic["2"] = "c";
    dic["3"] = "d";
    dic["4"] = "e";
    dic["5"] = "f";
    dic["6"] = "g";
    dic["7"] = "h";
    dic["8"] = "i";
    dic["9"] = "j";
    dic["10"] = "k";
    dic["11"] = "l";
    //dic["12"] = "двенадцать";
   string line = project.Variables["number"].Value;
//string line = "1 2 3 4 5 6 7 8 9 10 11"; // = project.Variables["number_2"].Value;
string[] chars = line.Split(new[]{" "}, StringSplitOptions.RemoveEmptyEntries).ToArray();

for(int i =0;i<chars.Length;i++) {
    string ch = chars[i];
    try {
        chars[i] =  dic[ch];
    }
    catch {
        project.SendWarningToLog("Не известное число - замена не производится");
    }
}
return string.Join(" ", chars);
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: ledsan

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
я прям дико извиняюсь господа но не могли бы вы мне помочь понять почему не работает((
если руками с клавиатуры записать в переменную 1 2 3 4 5 6 7 8 9 10 11 то все правильно на выходе
Выполнение кода C# Результат: b c d e f g h i j k l

ну а если значение получено в результате работы шаблона (сами эти цифры берутся из БД SQL) то все последнее значение не преобразуется в букву остается цифрой.
Вот эти числа из БД в переменных
99133

потом я объединяю эти числа в одну переменную
99134

у меня голова кругом идет, что не так
 

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
я уже и названия переменных менял, фары протирал, по колесу пинал а она не едет)))
 

ledsan

Client
Регистрация
15.02.2022
Сообщения
310
Благодарностей
66
Баллы
28
Всем спасибо еще раз! нашел почему в конце строки данных символ переноса его нужно было удалить
99135

теперь все отлично работает))
 

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