Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод в Edit1, вывод в Edit2 
:(
    Опции темы
DCamer
Дата 26.3.2010, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



При вводе текста в Edit1 нужно чтобы при нажатии на button в Edit2 был загружен перевод из текстового файла выполненного в стиле "Оригинал=Перевод", как такое можно создать?

Это сообщение отредактировал(а) DCamer - 26.3.2010, 00:15
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Данкинг
Дата 26.3.2010, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Вот, уже обсуждалось. Главное, друг у друга не списывайте. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
DCamer
Дата 26.3.2010, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Данкинг, В той теме программа по проверки правильности ввода перевода, но мне нужно другое, чтобы по файлу с переводом был поиск слова, а не сравнение номера строки (Я=1, I'am=1).
P.S. "Оригинал=Перевод" - это стиль в одном файле!

Добавлено @ 00:27
Нужно чтобы при вводе оригинального текста в Edit1, в Edit2 выводился текст который справа от равно!

Это сообщение отредактировал(а) DCamer - 26.3.2010, 00:28
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Данкинг
Дата 26.3.2010, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(DCamer @  26.3.2010,  00:24 Найти цитируемый пост)
чтобы по файлу с переводом был поиск слова

Грузи файл в TStringList и в цикле ищи построчно. Для небольших объёмов подойдёт, но для больших, разумеется, без БД не обойтись.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
DCamer
Дата 26.3.2010, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



smile  

Это сообщение отредактировал(а) DCamer - 26.3.2010, 02:51
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
orthrus
Дата 26.3.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 4
Всего: 16



Если я всё правильно понял то можно воспользоваться замечательным шаблоном std::map. Будет примерно вот так:
1. Создаем чистый проект;
2. Кидаем нужные компоненты на форму, в нашем случае два Edit и один Button;
3. В описание класса формы в секцию private добавляем
Код

std::map<std::string,std::string> dict;

4. В конструкторе формы, можно и в обработчике события OnCreate это кому как удобно, пишем следующий код:
Код

 typedef std::pair<std::string , std::string> pair_dict;
 std::fstream in_file("dict.txt"); //это файл со словарём формата Оригинал=Перевод. Его нужно создать в папке с проектом
 std::string sl1;
 std::string sl2;

 while (!in_file.eof())
    {
     std::getline(in_file,sl1,in_file.widen('='));
     std::getline(in_file,sl2,in_file.widen('\n'));
     dict.insert(pair_dict(sl1,sl2));
    }
 in_file.close();

5. в обработчике события OnClick кнопки Button пишем вот такой код:
Код

Edit2->Text = AnsiString(dict[Edit1->Text.c_str()].c_str());

6. Радуемся что всё работает

P.S. В следующий раз если хотите чтоб за вас всё решили то идём в центр помощи


--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
Usper
Дата 26.3.2010, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Если использовать встроенный в билдер класс TStringList, то всё окажется ещё проще:
в секцию private или public класса TForm1 запихиваем:
Код

TStringList *Dictionary;

в конструктор формы:
Код

Dictionary = new TStringList;
Dictionary->LoadFromFile("dic.txt");

в обработчик нажатия на кнопку:
Код

Edit2->Text=Dictionary->Values[Edit1->Text];


Это сообщение отредактировал(а) Usper - 26.3.2010, 10:17


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
DCamer
Дата 26.3.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



orthrus, 
Цитата(orthrus @  26.3.2010,  08:54 Найти цитируемый пост)
3. В описание класса формы в секцию private добавляем
Код

std::map<std::string,std::string> dict;

"[BCC32 Error] Unit2.h(21): E2316 'map' is not a member of 'std'"
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
DCamer
Дата 26.3.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Предыдущая ошибка исправлена добавлением инклудов, но есть другая
"[BCC32 Error] Unit2.cpp(25): E2094 'operator+' not implemented in type 'map<string,string,less<string>,allocator<pair<const string,string> > >' for arguments of type 'wchar_t *'
  Full parser context
    Unit2.cpp(24): parsing: void _fastcall TForm2::Button1Click(TObject *)
"

Добавлено через 6 минут и 31 секунду
Usper, ваш код работает отлично, только немного не хватает, пример поиск слов "Текст раз, текст два" и в Edit2 перевод подряд этих слов

Это сообщение отредактировал(а) DCamer - 26.3.2010, 12:31
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Usper
Дата 26.3.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Ну это вы уже замахнулись! Где вы видели такие словари? Если требуется подобный функционал нужно усложнять программу, парсить входную строку. Хотя это не так уж и сложно.



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
DCamer
Дата 26.3.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



удалено
Добавлено @ 13:53
Usper, словарь сам в таком же виде "Слово=Перевод" и чтобы edit2 соединял перевод слов, разделяя каждое слово пробелом

Это сообщение отредактировал(а) DCamer - 26.3.2010, 13:54
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Usper
Дата 26.3.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Что?
Вот функция которая умеет разбивать строку по запятым:
Код

AnsiString __fastcall TForm1::Foo (AnsiString S)
{
    TStringList *SL=new TStringList;
    AnsiString T;
    TSysCharSet Delimeters;
    Delimeters << ',';
    ExtractStrings(Delimeters, TSysCharSet(), S.c_str(), SL);
    for(int i=0; i<SL->Count; i++)
    {
        if(i!=0) T=T+", ";
        T=T+Dictionary->Values[SL->Strings[i].Trim()];
    }
    return T;
}

Как видите ничего сложного.
Соответственно код кнопки:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Edit2->Text=Foo(Edit1->Text);
}

Ну и не забыть поместить объявление функции в объявление класса.

Это сообщение отредактировал(а) Usper - 26.3.2010, 14:58


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
DCamer
Дата 26.3.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Цитата(Usper @  26.3.2010,  14:57 Найти цитируемый пост)
Что?

Например, если в Edit1 написан текст "Секретный файл", то в Edit2 должны быть выведены переводы слов "Секретный" и "файл" через пробел, т.е. "Secret file"
--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Usper
Дата 26.3.2010, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Ну так и что? Почему мой вариант не устраивает? Замените запятую в Delimeters на пробел или даже добавьте его, поправьте формирование выходной строки тут:
Код

if(i!=0) T=T+", ";

и всё будет работать.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
DCamer
Дата 26.3.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 29.1.2010

Репутация: нет
Всего: нет



Usper, вот это не устраивает:
[BCC32 Error] Unit2.cpp(30): E2109 Not an allowed type
[BCC32 Error] Unit2.cpp(35): E2316 '_fastcall TForm2::Foo(AnsiString)' is not a member of 'TForm2'
[BCC32 Error] Unit2.cpp(40): E2034 Cannot convert 'char *' to 'wchar_t *'
[BCC32 Error] Unit2.cpp(40): E2342 Type mismatch in parameter 'Content' (wanted 'wchar_t *', got 'char *')
[BCC32 Error] Unit2.cpp(46): E2467 '_fastcall TForm2::Foo(AnsiString)' cannot return a value

--------------------
Нуб!   Windows 7 Ultimate x64, Embarcadero RAD Studio 2010 - C++Builder 2010
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.