Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
RAD XE4+

Как из Memo считать все слова в массив?

15.05.2018, 12:15. Показов 2753. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общим задача такая
1)Есть текстовый файл в нем много строк текста.Из него нужно считать все слова в массив,заменить словами из другого массива слов и сохранить,как новый файл.
2))Есть текстовый файл в нем много строк текста.Их нужно в поле Мемо загрузить и прочитать в массив.Заменить словами из другого массива слов и сохранить,как новый файл.
Задачу решить с применением ООП.
Вроде простая задача.

Добавлено через 2 минуты
А как получить доступ к этому массиву ведь нужно знать к-во слов?считать ли за слова знаки пунктуации?
C++
1
AsiString text = Memo->Text;
Добавлено через 12 минут
Я так понимаю,вот так обращаться к массиву слов из Мемо
C++
1
2
3
4
5
6
7
for (int i = 1; i < text.Length(); i++)
    //char a = text[i];
//Сюда нужно  text[i] сравнить с массивом русских слов из словаря rus.txt с целью узнать его порядковый номер
//сюда нужно загрузить массив слов из файла eng.txt
//а тут нужно индекс найденного слова из массива  rus.txt подставить в массив eng.txt
//если такой индекс есть то сформировать новый массив и внести слово после замены.
//вообщим машинный перевод дословно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2018, 12:15
Ответы с готовыми решениями:

Как из memo вывести в listbox все слова, которые начинаются на ту же букву, что и последнее слово из memo?
и при этом сохранить порядок слов которые были в memo

Как из Memo считать данные в массив?
Элементы разделяются через пробел, надо их забить в массив, не важно какой.

Как считать текст из memo в массив?
доброго времени суток, форумчане! подскажите, как считать текст из окна memo в массив?

18
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
15.05.2018, 14:12
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

Все проще. Есть такая функция ReplaceStr(source_string, replace_from, replace_to)
C++
1
2
3
4
5
  AnsiString aSource=Memo1->Text;
 
    aSource=ReplaceStr(aSource, "ABRA", "CADABRA");
 
 Memo2->Text=aSource;

Не по теме:


за AnsiString volvo меня убьет :)



Добавлено через 7 минут
А по теме создаем два файла rus.txt, eng.txt где слова идут по порядку т.е. 1 слово в русском соответствует 1 слову на английском.
в Memo1 загружаем исходный текст, в StringList's загружаем словари и в цикле погнали:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  TStringList *rus = new TStringList;
  TStringList *eng = new TStringList;
 
   Memo1->Lines->LoadFromFile("d:\\source.txt");
   rus->LoadFromFile("rus.txt"); //оба файла должны иметь одинаковое кол-во строк
   eng->LoadFromFile("eng.txt");
 
  AnsiString aSource=Memo1->Text;
 
   for(int i=0; i<rus->Count; i++)
    aSource=ReplaceStr(aSource, rus[i], eng[i]);
 
  Memo2->Text=aSource;  
 
  delete eng;
  delete rus;
1
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
15.05.2018, 15:10
TrollHammer, ну вот смотрите...
Словарь
хлебbread
молокоmilk
сырcheese
Текст: "Хлеб, Молоко, Сыр"
Переведет? Нет! Почему? Потому, что "Хлеб" != "хлеб"
А если попробовать при текущем словаре перевести слово "хлебный" - то и получим то, что на скрине...
Миниатюры
Как из Memo считать все слова в массив?  
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
15.05.2018, 15:15
D1973, Я закинул шаблон, исходя из объяснений ТС, т.е. я понял что замена идет "слово-в-слово". А о точнов соответствии букв (заглавная или строчная) не говорилось. Дальше уже дело за фантазией

Добавлено через 1 минуту
Если стоит вопрос создания переводчика, то там применяются совершенно другие методы
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 16:06  [ТС]
Хотелось бы с учетом регистра букв шел поиск,если не нашел по заглавным,пусть ищет по строчным.
[/CPP]
Цитата Сообщение от TrollHammer Посмотреть сообщение
Дальше уже дело за фантазией
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
15.05.2018, 16:13
А что мешает использовать функции AnsiString LowerCase()/UpperCase()?

Добавлено через 1 минуту
C++
1
aSource=ReplaceStr(aSource.LowerCase(), rus[i], eng[i]); //в словарях все слова из прописных букв
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 16:54  [ТС]
Цитата Сообщение от TrollHammer Посмотреть сообщение
А что мешает использовать функции AnsiString LowerCase()/UpperCase()?
в словаре все слова будут с заглавной буквы,в а тексте в предложения почти все строчные кроме тех с которых начинаеться предложения.
Указанные вами функции они переводят все слово в заглавные или строчные буквы.А нужно перевести только первую букву слова.я так понимаю.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33404 / 21514 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
15.05.2018, 17:08
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <System.RegularExpressions.hpp>
#include <System.IOUtils.hpp>
 
// ...
 
TStringList *ru, *en;
 
String __fastcall TForm1::DoReplace(const TMatch &Match) // Заголовок добавить в класс формы
{
    TMatch m(Match);
    String s = AnsiLowerCase(m.Value);
 
    int ix = ru->IndexOf(s);
    if (ix != -1)
        s = en->Strings[ix];
    if (AnsiLowerCase(m.Value) != m.Value)
        s[1] = UpCase(s[1]);
    return s;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    en = new TStringList;
    en->LoadFromFile(ExtractFilePath(ParamStr(0)) + "eng.txt");
    ru = new TStringList;
    ru->LoadFromFile(ExtractFilePath(ParamStr(0)) + "rus.txt");
 
    String s = TFile::ReadAllText(ExtractFilePath(ParamStr(0)) + "text.txt", TEncoding::UTF8);
    s = TRegEx::Replace(s, L"[а-яА-Я]+", DoReplace, TRegExOptions() << roSingleLine);
    ShowMessage(s);
 
    delete ru;
    delete en;
}
На файлах

Кликните здесь для просмотра всего текста
rus.txt
Code
1
2
3
4
5
6
7
8
9
10
11
один
два
три
четыре
пять
шесть
семь
восемь
девять
десять
привет
eng.txt
Code
1
2
3
4
5
6
7
8
9
10
11
one
two
three
four
five
six
seven
eight
nine
ten
hello
text.txt
Code
1
2
3
привет, 2939 Один, два, Три... 
 
четыре - пять
прекрасно отработало (Builder XE8. На XE4 вылетает с ошибкой почему-то). Вывело строку
Code
1
2
3
hello, 2939 One, two, Three... 
 
four - five
(те слова, которые по-русски были с заглавной - с заглавной же и остались по-английски).

Добавить запись в файл через TFile::WriteAllText - дело двух секунд.
2
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
15.05.2018, 17:10
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
если не нашел по заглавным,пусть ищет по строчным
Вот это называется - "без учета регистра"
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
Хотелось бы с учетом регистра букв
так Вы уж определяйтесь, так или эдак...
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
я так понимаю
абсолютно нет. Необходимо привести слово в словаре и слово в тексте к одному регистру: либо все буквы (и там, и там) большие, либо маленькие. Этим как раз и занимаются функции, на которые Вам указал TrollHammer
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 17:38  [ТС]
подскажите из Мемо можно вывести текст перевода на принтер,есть же PrinterDialog.Остаеться найти базу русских слов,чтобы каждое слово было с новой строки.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 18:22  [ТС]
slovar_10000.rar
rus.txt
eng.txt
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 19:10  [ТС]
eng.txt через инструмент удаления дубликатов.Было 10 000 стало 7060 слов.Странно.А как быть со словами на которые нет перевода,они включаются во второе Мемо для перевода или исключаються из него?

Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
На файлах
у меня XE8,буду проверять работу этого исходника.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 19:25  [ТС]
ошибка при помещении
C++
1
    String __fastcall TForm1::DoReplace(const TMatch &Match) // Заголовок добавить в класс формы
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 19:26  [ТС]
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
ошибка при помещении
Я забыл точку с запятой в конце поставить.
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
15.05.2018, 19:45  [ТС]



UNF 8 не нравиться,хочет multi byte code page
К тому же русский язык богатый на склонения по падежам ,а от этого eng.txt вздуеться
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
16.05.2018, 13:12  [ТС]
C++
1
String s = TFile::ReadAllText(ExtractFilePath(ParamStr(0)) + "text.txt", TEncoding::UTF8);
нужно заменить на multi byte code
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
19.05.2018, 18:31  [ТС]
Цитата Сообщение от TrollHammer Посмотреть сообщение
ReplaceStr
Такой функции нет.
Какую библиотеку подключить?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
20.05.2018, 23:20
System.StrUtils.hpp
0
25 / 9 / 17
Регистрация: 22.12.2015
Сообщений: 2,097
21.05.2018, 03:04  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
System.StrUtils.hpp
не могу понять в словаре rus1.txt написал выпечки,из Memo1 правильно слово читается. А вот в ukr1.txt випічки.По нажатию кнопки перевести получаю
віпічкі.
Откуда он его берет?Все исходники в UTF-8.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2018, 03:04
Помогаю со студенческими работами здесь

Как найти слова в Memo, в которых все буквы заглавные?
C++ Builder Есть текст в Memo: 14.09.16 APRICOT, fruits D=0.019 14.09.16 YOGHURT, dairy D=0.020 14.09.16 GREEN PEAS, vegetables...

Как считать слова с файла по отдельности и записать в массив?
Подскажите пожалуйста. Есть файл с словами и цифрами. Слова в первой строке, цифры во второй. например: Маша Таня Юля Сергей Иван ...

Считать элементы из Memo в массив чисел
подскажыте, пожалуста, как мне считать елементы с memo, которіе введены в один столбец, тоесть каждый елемент с нового рядка? мне нужно...

Как считать из файла все байты в массив?
Всем здравствуйте. Есть двоичный файл. Как считать его содержимое в соответствующий ему по размеру байтовый массив buf? char*...

как мне строку внести в цикл чтоб в memo вывелись все слова которые есть между значениями 'alt=' 'title='
Здравствуйте подскажите пожалуйста как мне эту строку Memo2.text...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru