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

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

15.05.2018, 12:15. Показов 2713. Ответов 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
9910 / 6447 / 2455
Регистрация: 21.01.2014
Сообщений: 27,365
Записей в блоге: 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
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 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
9910 / 6447 / 2455
Регистрация: 21.01.2014
Сообщений: 27,365
Записей в блоге: 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
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
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
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru