Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Толик Панков ([info]hex_laden) в [info]csharp_dotnet
@ 2012-11-09 07:27:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:c#, исходники, как сделать, начинающим, статьи

Транслит и C#

Задача - написать транслитер на C# (Csharp).


Длря решения этой задачи воспользуемся таким чудом C# (Csharp),
как словари (Dictionary). Стоит отметить, что словари появились
в версии .NET Framework 2.0.. Dictionary представляет собой
набор данных связанных как ключ-значение. При обьявлении словаря следует
указывать типы с которыми будет работать словарь.



Например:


Dictionary<string, string> dict = new Dictionary<string, string>();

  Обьявляем словарь который будет работать с типами String.

  Рассмотрим уже на практике добавление параметров в словарь. Для этого создадим
новый проект в Visual Studio 2005 и положим на форму два
компонента TextBox: textBox1 и textBox2. В первый будем вводить русский текст,
во вротом будем получать текст на транслите.

  Обьявляем наш словарь:
Dictionary<string, string> words = new Dictionary<string, string>();

  Теперь добавим наши значения русских букв, и их аналоги на транслите. Для
этого используем метод Add(string, string):
 words.Add("а", "a");
 words.Add("б", "b");
..

  Этот код можно добавить после InitializeComponent().

  Дальше нужно написать код замены букв с использованием Dictionary.
Сделаем что б при вводе текста в первое поле ввода, во втором сразу отображался
аналог текста, но на транслите. Для этого обрабатываем событие
TextChanged
нашего textBox1:
string source = textBox1.Text;
foreach (KeyValuePair<string, string> pair in words)
{
    source = source.Replace(pair.Key, pair.Value);
}
textBox2.Text = source;

  Код довольно простой, мы получаем строку которую содержит textBox1, проходим
по ней циклом и заменяем все что попало в наш словарь как ключ-значение. После
цикла присваиваем textBox2 обработанную строку. Это позволяет получать транслит
сразу после ввода русских букв в первом поле ввода.

  Вот итоговый вариант:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Transliter
{
    public partial class Form1 : Form
    {
        Dictionary<string, string> words = new Dictionary<string, string>();

        public Form1()
        {
            InitializeComponent();
            words.Add("а", "a");
            words.Add("б", "b");
            words.Add("в", "v");
            words.Add("г", "g");
            words.Add("д", "d");
            words.Add("е", "e");
            words.Add("ё", "yo");
            words.Add("ж", "zh");
            words.Add("з", "z");
            words.Add("и", "i");
            words.Add("й", "j");
            words.Add("к", "k");
            words.Add("л", "l");
            words.Add("м", "m");
            words.Add("н", "n");
            words.Add("о", "o");
            words.Add("п", "p");
            words.Add("р", "r");
            words.Add("с", "s");
            words.Add("т", "t");
            words.Add("у", "u");
            words.Add("ф", "f");
            words.Add("х", "h");
            words.Add("ц", "c");
            words.Add("ч", "ch");
            words.Add("ш", "sh");
            words.Add("щ", "sch");
            words.Add("ъ", "j");
            words.Add("ы", "i");
            words.Add("ь", "j");
            words.Add("э", "e");
            words.Add("ю", "yu");
            words.Add("я", "ya");
            words.Add("А", "A");
            words.Add("Б", "B");
            words.Add("В", "V");
            words.Add("Г", "G");
            words.Add("Д", "D");
            words.Add("Е", "E");
            words.Add("Ё", "Yo");
            words.Add("Ж", "Zh");
            words.Add("З", "Z");
            words.Add("И", "I");
            words.Add("Й", "J");
            words.Add("К", "K");
            words.Add("Л", "L");
            words.Add("М", "M");
            words.Add("Н", "N");
            words.Add("О", "O");
            words.Add("П", "P");
            words.Add("Р", "R");
            words.Add("С", "S");
            words.Add("Т", "T");
            words.Add("У", "U");
            words.Add("Ф", "F");
            words.Add("Х", "H");
            words.Add("Ц", "C");
            words.Add("Ч", "Ch");
            words.Add("Ш", "Sh");
            words.Add("Щ", "Sch");
            words.Add("Ъ", "J");
            words.Add("Ы", "I");
            words.Add("Ь", "J");
            words.Add("Э", "E");
            words.Add("Ю", "Yu");
            words.Add("Я", "Ya");
	}

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string source = textBox1.Text;
            foreach (KeyValuePair<string, string> pair in words)
            {
                source = source.Replace(pair.Key, pair.Value);
            }
            textBox2.Text = source;
        }
    }
}

   В итоге мы получили транслитер, который динамически
обрабатывает введенный пользователем текст.

Источник:
http://devoid.com.ua/


Автор: Макагон Сергей



Источник: http://www.realcoding.net/articles/transliter-na-c-csharp.html
И исходник класса транслиттера: http://yadi.sk/d/mzhpj_jA0d6Ky