- Регистрация
- 11.05.2015
- Сообщения
- 3 855
- Благодарностей
- 2 087
- Баллы
- 113
Всем привет.
В этом посте расскажу как решить проблему с выбором даты, если название месяца написано на иностранном языке. Возможно на полноценную статью это не тянет, но как лайфхак для работы вполне.
Если название месяца написано на популярном языке (русском, английском и т.п.) то с выбором месяца проблем обычно не возникает, а как быть если месяц для выбора предлагается выбрать из не стандартных, иногда даже написанных не латиницей или кириллицей, а иероглифами.
Конечно, можно делать рандомное количество свайпов вверх или вниз, выбирая месяц, но тогда может измениться и год. При рандомном выборе месяца, можно таким же образом спарсить месяц, а потом уже год.
Самый простой вариант это сделать привязку к номеру месяца и создать словарь значений, где для каждого названия месяца указать его номер.
Как это будете делать, через базы данных или текстовые файлы, это уже ваш выбор.
Покажу самый простой вариант с текстовым файлом.
Заполняете 12 строк для каждого языка, который хотите использовать при выборе даты.
Т.е. надо спарсить все названия месяцев из блока с датой и добавить им индексы.
Название месяца и через | его индекс. Без пробелов и лишних символов.
Английский и русский приведены в качестве примера (для разновидности заполнения), их добавлять не обязательно. Можно добавить только нужные языки, которые используете в работе.
Всего в файле должно быть число строк кратное 12 без повторов названий месяцев.
Через код считываем строки из этого файла и заполняем словарь
При выборе месяца, парсите текущее значение из аттрибута в дереве элементов из сохраненных файлов
или так через зеннодроид
А из словаря получаете заданный индекс используя код C#
Сравниваете полученный индекс с индексом нужного месяца, и при необходимости делаете свайп в нужную сторону.
После свайпа повторяете получение текущего выбранного месяца и сравнение.
Сохраняете выбранные значения в переменную и используете дальше.
Подробности в прикрепленном проекте для зеннодроид.

В этом посте расскажу как решить проблему с выбором даты, если название месяца написано на иностранном языке. Возможно на полноценную статью это не тянет, но как лайфхак для работы вполне.
Если название месяца написано на популярном языке (русском, английском и т.п.) то с выбором месяца проблем обычно не возникает, а как быть если месяц для выбора предлагается выбрать из не стандартных, иногда даже написанных не латиницей или кириллицей, а иероглифами.
Конечно, можно делать рандомное количество свайпов вверх или вниз, выбирая месяц, но тогда может измениться и год. При рандомном выборе месяца, можно таким же образом спарсить месяц, а потом уже год.
Самый простой вариант это сделать привязку к номеру месяца и создать словарь значений, где для каждого названия месяца указать его номер.
Как это будете делать, через базы данных или текстовые файлы, это уже ваш выбор.
Покажу самый простой вариант с текстовым файлом.
Заполняете 12 строк для каждого языка, который хотите использовать при выборе даты.
Т.е. надо спарсить все названия месяцев из блока с датой и добавить им индексы.
Название месяца и через | его индекс. Без пробелов и лишних символов.
Английский и русский приведены в качестве примера (для разновидности заполнения), их добавлять не обязательно. Можно добавить только нужные языки, которые используете в работе.
Всего в файле должно быть число строк кратное 12 без повторов названий месяцев.
Через код считываем строки из этого файла и заполняем словарь
C#:
// Путь к файлу. например в папке проекта.
string pathFileMonth = Path.Combine(project.Directory, "DicMonth.txt");
// Заполняем словарь месяцевDictionary<string, int> DicMonth = new Dictionary<string, int>();
if (!string.IsNullOrEmpty(pathFileMonth) && File.Exists(pathFileMonth))
{
// Читаем строки из файла
string[] listLang = File.ReadAllLines(pathFileMonth);
if (listLang.Length == 0)
{// Если файл пустой
project.SendWarningToLog($"Файл пуст '{pathFileMonth}'", true);
return "Empty";
}
foreach (string line in listLang)
{// Перебираем строки. Пропускаем пустые.
if (string.IsNullOrWhiteSpace(line)) continue;
// Проверяем разделитель в строке
if (line.Contains("|"))
{// месяц|индекс например Dec|12
string[] keys = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
int.TryParse(keys[1], out int num);
project.SendInfoToLog($"Добавляем {keys[0]}");
DicMonth.Add(keys[0].ToLower(), num);
}
else
{// Если нет разделителя или неверный формат записи в строке.
project.SendErrorToLog($"Неверный формат заполнения '{pathFileMonth}'", true);
break;
}
}
// Для поддержки сразу нескольких языков в файле.
if (DicMonth.Count % 12 != 0)// если есть остаток, будет true)
{// Ошибка при неверном количестве добавленных строк
project.SendErrorToLog($"Число строк должно быть кратно 12. Сейчас {DicMonth.Count}. Проверьте количество строк в '{pathFileMonth}'", true);
throw new Exception();
}
project.SendInfoToLog($"Успешно заполнили словарь месяцев. строк {DicMonth.Count}");
project.Context["DicMonth"] = DicMonth;
}
или так через зеннодроид
А из словаря получаете заданный индекс используя код C#
C#:
// Получаем заполненный словарь со значениями
var DicMonth = project.Context["DicMonth"];
// Получаем текущее значение выбранного месяца. например "เม.ย." или "ноябрь" или какое спарсили из кода;
string nameMonth = project.Variables["nameMonth"].Value.ToLower();
// Получаем индекс месяца по его названию
DicMonth.TryGetValue(nameMonth, out int indexMonth);
project.SendInfoToLog($"Индекс {nameMonth} => {indexMonth}");
// Проверяем индекс с нужным
int.TryParse(project.Variables["needMonthIndex"].Value, out int needIndex);
// Определяем завершили выбор или нет. Надо ли еще крутить и в какую сторону
if(indexMonth == 0 || needIndex == 0)
{
return $"Ошибка получения индекса для {nameMonth}";
}
else if(indexMonth == needIndex)
{
return "=";
}
// Для switch можете добавить вариантов, чтобы крутить сразу на нужное количество месяцев, а не по одному.
else if(indexMonth > needIndex)
{
return "вниз";
}
else if(indexMonth < needIndex)
{
return "вверх";
}
После свайпа повторяете получение текущего выбранного месяца и сравнение.
Сохраняете выбранные значения в переменную и используете дальше.
Подробности в прикрепленном проекте для зеннодроид.

Вложения
-
21,7 КБ Просмотры: 27
Последнее редактирование модератором: