/// <summary> /// распарсить строку и сравнить ее с числом /// </summary> /// <param name="str"> число прописью </param> /// <param name="number"> число-образец </param> private void ParseNumber(string str, long number) { var parsed = RussianNumber.Parse(str); bool good = parsed == number; writer.Write("Значение: "); writer.Write(ConsoleColor.White, str); writer.Write(" ("); writer.Write(ConsoleColor.White, number.ToString()); writer.Write("), распознанное: "); writer.Write(ConsoleColor.White, parsed.Value.ToString()); if (parsed.Error > 0) { writer.Write(", ошибка: "); writer.Write(good ? ConsoleColor.DarkRed : ConsoleColor.Red, parsed.Error.ToString("0.000", CultureInfo.InvariantCulture)); } writer.Write("... "); if (good) { writer.WriteLineSuccess(); } else { writer.WriteLineError(); } }
/// <summary> /// протестировать конвертацию числа в текст и наоборот /// </summary> public void TestConvertAndBack() { long start = 0L; long count = 50; for (long i = start; i < start + count; i++) { var str = RussianNumber.ToString(i); ParseNumber(str, i); } }
/// <summary> /// функция формирования статистики по используемым символам и токенам /// </summary> private void Stats() { var list = new List <string>(); for (int i = 0; i < 99999; i++) { list.Add(RussianNumber.ToString(i).ToLowerInvariant()); } // список символов var chars = list.SelectMany(e => e).Distinct().Where(e => char.IsLetter(e)).OrderBy(e => e).ToArray(); // список токенов var tokens = list.SelectMany(e => e.Split()).Distinct().OrderBy(e => (e.Length, e)).ToArray(); // используемые символы var validChars = new string(chars); // неиспользуемые символы var invalidChars = new string("абвгдеёжзийклмнопрстуфхцчшщъыьэюя".Except(chars).ToArray()); // список токенов текстом var tokensList = string.Join(Environment.NewLine, tokens); }