Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7

Разбить текст в Edit по признаку

23.01.2013, 23:12. Показов 2175. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Edit есть набор символов. Например "Part1.Common.". Как лаконичней вычленить из содержимого отдельно Part1 и отдельно Common для последующего использования? Циклически "бежать" по строке до первой точки, а потом до последней?
Может есть что-то более функциональное?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2013, 23:12
Ответы с готовыми решениями:

Текст из edit разбить на слова, отсортировать и залить в memo
Дан текст содержащий от 2 до 50 слов в каждом из которых от 1 до 8 латинских букв, между соседними словами не менее одного пробела, за...

Считать с Edit текст, убрать последний символ из строки и снова записать в Edit
Всем доброго времени суток. У меня тут возник вопрос, как можно считать с Edit текст, а потом убрать последний символ из этой строки и...

ТЕКСТ: С Edit'a в масив и обратно в EDIT
вот у меня задание (сам себе захотел научиться) но так и не научился ( зхотел ТЕКСТ перевести в масив (чтобы потом работать с елементами...

14
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.01.2013, 23:24
Здесь рулят строковые функцие
0
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
23.01.2013, 23:33  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Здесь рулят строковые функцие
Это-то я понял. В посте Разбить 1 Edit на 2 Editы кое-что подсмотрел, но хочется чего-то...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.01.2013, 23:35
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::FormShow(TObject *Sender)
{
 Edit1->Text = "Part1.Common.";
 
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ShowMessage(Edit1->Text.SubString(1,Edit1->Text.Pos(".")-1));
 ShowMessage(Edit1->Text.SubString(Edit1->Text.Pos(".")+1,6));
}
1
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
23.01.2013, 23:44  [ТС]
Это бы работало, но (!) я не знаю длину Part1 и длину Common. Знаю что формат строки такой. Т.е. разделен точками между собой и в конце. Может стоит попробывать Delimiter?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
23.01.2013, 23:48
или так:__
C++
1
2
3
     String Str = "Ìàøà.ìûëà,ðàìó;ñ ìûëîì";
     ExtractStrings(TSysCharSet() << ';'<<'.'<<',',
                    TSysCharSet(), Str.c_str(), Memo1->Lines);
здесь в строку задаются символы-разделители ( : . , ) и разделенные ими слова передаются в список (в данном случае это Memo-Lines)
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
23.01.2013, 23:52
А куда ты хочешь эти части строки вкинуть в переменные или куда?
0
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
24.01.2013, 00:02  [ТС]
Тоже работает, но я в любом случае должен проверить, что формат исследуемого слова именно такой, и если условия выполнены, т.е. присутствует ТОЛЬКО точка в середине, и ТОЛЬКО точка в конце и ничего лишнего, начинаю процедуры

Добавлено через 1 минуту
Цитата Сообщение от Sasha Посмотреть сообщение
А куда ты хочешь эти части строки вкинуть в переменные или куда?
По итогам проверки одна часть указывает на одну из веток кода, а вторая на тип обработчика. Это естественно переменные

Добавлено через 5 минут
Изначально мысль была следующая - пустить цикл по строке, пока не найдет первую точку, эту часть временно записали в какой-то Tmp1, читаем дальше после первой точки. Если точки нет - условие не выполнено. Если уткнулись еще в одну точку и после нее больше ничего нет, получаем Tmp2 и поехали дальше по коду. Но условия постоянно меняются...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
24.01.2013, 00:03
- ну так создай StringList, запиши туда слова, разделенные одним разделителем - точкой, и потом проанализируй по значению счетчика StringList - сколько слов получилось; и слова в StringList распределены по своим индексам (по порядку: 0 1 2 ...).
0
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
24.01.2013, 00:28  [ТС]
Я и думал через TStringList. Delimiter присвоить точке, в DelimitedText закинуть строку, а потом вытаскивть содержимое Strings[i] и кидать в Tmp[i]... Но уткнулся в какой-то замкнутый круг. Сейчас попробую найти, что делал.

Добавлено через 9 минут
Пробовал так
C++
1
2
3
4
5
6
7
TStringList *sl = new TStringList();
sl->DelimitedText = "Part1.Common.";
sl->Delimiter = '.';
 for(int i = 0; i < sl->Count; i++) 
 {
 dynamic_cast<TEdit*>(FindComponent("Edit" + IntToStr(i + 1)))->Text = sl->Strings[i];
 }
Допустим, чтобы увидеть, что работает раскинуть на Edit1 и Edit2

Пусть текст возмем просто, ну пока с прямого объявления

Добавлено через 9 минут
Не раскидывает, хоть стреляй
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
24.01.2013, 00:46
Вот так делит
C++
1
2
3
4
5
6
7
8
9
TStringList *sl = new TStringList();
 sl->Clear();
 sl->Delimiter = '.';
 sl->DelimitedText = "Part1.Common.";
 
 for(int i = 0; i < sl->Count; i++)
 {
   dynamic_cast<TEdit*>(FindComponent("Edit" + IntToStr(i + 1)))->Text = sl->Strings[i];
 }
1
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
24.01.2013, 11:03  [ТС]
Благодарю за помощь! Помощь неоценимая! А то к концу дня (ночи) уже стал ходить кругами.


Но утром с более свежей головой хочу реализовать немного не так и прошу натолкнуть на мысль каким образом:

1. взять из Edit'a строку,
2. сделать проверку на наличие разделителей (т.е. они такие и никакие иначе), если же условие не выполнено содержимое Edit оставить без изменений. Если все нормально - первую часть вернуть (оставить) в то же поле Edit, а вторую отправить в Label.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.01.2013, 11:59
А использовать примеры, которых вам предоставили предостаточно выше, для решения и этой "свежей" мысли мысль более свежую голову не посещала?
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
24.01.2013, 13:14
попробую натолкнуть (если я правильно понял задачу)__
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList *sl = new TStringList;
    ExtractStrings(TSysCharSet() << '.' ,
                    TSysCharSet(), Edit1->Text.c_str(), sl);
    if (sl->Count==2 && Edit1->Text[Edit1->Text.Length()]=='.')
    {
      Edit1->Text = sl->Strings[0];
      Label1->Caption = sl->Strings[1];
    }
    delete sl;
}
2
0 / 0 / 0
Регистрация: 23.01.2013
Сообщений: 7
24.01.2013, 14:23  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
попробую натолкнуть (если я правильно понял задачу)
Thanx, разобрался!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2013, 14:23
Помогаю со студенческими работами здесь

Разбить 1 Edit на 2 Editы
Реально ли разбить содержимое 1 Edita на 2 Editы. Например, Edit1 содержит текст &quot;Волгоград-Москва&quot;, надо чтоб Edit2 был...

Разбить текст в Edit
Нужно написать процедуру, которая разбивает текст в edit на 3 части и записывает каждую часть в строковую переменную. Части в тексте...

Как разбить на части текст вводимый в edit(memo)?
Добрый день. Нужно решить задачу, и для решения необходимо разбить вводимый текст (последовательность чисел). Текст можно ввести через Edit...

Разбить файл на маленькие по признаку
Уважаемые форумчане, прошу вас помочь с поставленной задачей. Сильно не пинать, я новичок :) Пользователь выбирает исходный файл, ...

Разбить на несколько групп массив по признаку
Здравствуйте! Нужна помощь, подскажите, если кто знает, как решить задачу. У меня имеется список значений дат &quot;с&quot; и...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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