Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/104: Рейтинг темы: голосов - 104, средняя оценка - 4.78
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798

Фукнции для работы со строками [AnsiString]

25.11.2009, 14:10. Показов 21166. Ответов 28

Студворк — интернет-сервис помощи студентам
Всем привет. В Java Script'e есть такая функция - split();, которая разбивает текст на количество отдельных строк по заданному разделителю. Например строку
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows NT\CurrentVersion\Print\Printers\HP Deskjet D1500
такая функция по заданному разделителю, в данном случае слешу '\'
Java
1
split("\\");
Разобьёт на следующие строки:
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows NT
CurrentVersion
Print
Printers
HP Deskjet D1500
Ищу аналог для C++ если есть. Так же нужно разбиение строки на отдельные слова (лексемы) по пробелам.

Добавлено через 20 минут
Поторопился малость, вспомнил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
#include <string.h>
...
   char * tokenPtr;
   tokenPtr = strtok(RichEdit1->Lines->Strings[i].c_str(), "\\");
   RichEdit2->Lines->Add(tokenPtr);
 
   while(tokenPtr != NULL){
       tokenPtr = strtok(NULL, "\\");
       RichEdit2->Lines->Add(tokenPtr);
      }
...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2009, 14:10
Ответы с готовыми решениями:

Пакет для работы со строками
Всем привет! решил выложить пакет для работы со строками из учебника Тома Свана (может кому пригодится:)) В архиве MTA_LIB лежат...

Класс для работы со строками
Вот мой класс: public class stroka { string Line; int n; public double Razmer { ...

Разработка ПО для работы со строками
разработка ПО для работы со строками ..... по такой теме какие функции можно реализовать в программе,подскажите пожалуйста

28
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2009, 17:40  [ТС]
Ребята, очень прошу, помогите найти функцию, или аналог как в Java Script'a.
JavaScript
1
var ptr = /.\..{3}$/;
Точка - это любой символ в регулярном выражении.
"\." - это символ самой точки,
".{3}" - три любых символа,
"$" - конец строки

Цель: Без участия пользователя по нажатию на кнопку, просканировать весть текст и вывести лишь те строки, в которых встречается имя файла. Нужно отметить, что структура текста - одна строка - одна единица информации, текст, описание файла + путь и имя к файлу.
Задать шаблон поиска по тексту, некоторой строки вида #.### - где # - любой символ алфавита. есть точка и ### - три любых символа алфавита, на расширение файла (вроде как i.sys - подходит, d.exe - подходит, a.dll - подходит и т.д.). В тексте встречаются имена файлов с их полными путями, нужно определить является ли строка адресом к файлу или это обычная строка текста.

Просканировать текст построчно могу, но не знаю, как задать маску для поиска и проверки, являются ли последние четыре символа расширением или нет?

Мне кажется в C++ такого нету. ((( Очень надо.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.11.2009, 21:50
Глянь сюда:
http://www.tropicsoft.com/Comp... xpression/
тут есть библиотека для билдера по вычислению регулярных выражений.
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
26.11.2009, 22:23  [ТС]
В английском слабоват. Скачал для C++ Builder 6.0, пакет установился в Program Files, он уже подключился или мне нужно взять содержимое папки Include и перекинуть в Builder'овскую папку, так? А дальше использовать функцию FormatType вроде бы?

Там пример есть, но что он делает, не врубаюсь, слишком сложный сейчас для меня.

Otaka, Ты пользовался этим пакетом? Можешь объяснить на русском, как и куда устанавливать\кидать\подключать?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
27.11.2009, 18:19
А что там сложного? Этот компонент очень похож на RegEx из NET.
Запускаешь инсталяшку и устанавливаем библиотечку(Предположим ты выбрал установку по умолчанию(C:\Program files\TSE\))
Затем включаем Билдер, берем наш проект, и в Project/Options/Directories добавляем к путям include папку C:\Program Files\TSE\Regular Expression Component Library Bcb6\Include\(или какая там она у тебя). А потом еще делаем Project/add to project и выбираем lib файл RegularExpressionLibBcb6.lib из
C:\Program Files\TSE\Regular Expression Component Library Bcb6\Lib\. Оно тогда статически прилинкуется, но размер приложения вырастет на метр, можешь попробовать с разными либами линковаться.
Теперь можешь кидать на форму компонент RegularExpression. В пропертю Expression заносишь необходимый шаблон, а в StringToMatch проверяемое значение. Осталось только вызвать Match и проверить результат. Там достаточно много настроек с которыми я не знаком, поэтому придется тебе разбираться с ними самому. Я не очень дружу с регулярными выражениями.
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
30.12.2009, 19:27  [ТС]
Всех с Наступающим Новым Годом. Здоровья и Успехов.

У меня вопрос, сам не знаю как решить. Дана строка - String, в этой строке, есть SubString из 8 символов, которую я ищу, и её нахожу функцией, так как эта комбинация в этой строке всегда одна. Переменной indexPtr1 присваивается позиция начала этой строки. Всё нормально.
C++
1
indexPtr1 = RichEdit1->Lines->Strings[i].LowerCase().AnsiPos(str1);
В строке String помимо искомой SubString, есть ещё одна комбинация состоящая из двух символов и она должна присутствовать перед искомой ранее SubString, беда в том, что она может встретиться не только до, но и после первой SubString, мне нужна та, которая до
Этот вариант не проходит. Так как он даёт определение всех перечисленных разделителей, а мне нужно фиксировано найти два символа стоящих рядом
C++
1
indexPtr2 = LastDelimiter(delim1, RichEdit1->Lines->Strings[i]);
Этот тоже, так как в случаях, когда искомых SubString две, он даёт самую первую искомую комбинацию
C++
1
indexPtr2 = RichEdit1->Lines->Strings[i].AnsiPos(delim2);
Например строка вида

Code
1
del*; del*; operator; command; del*;
Должна на выходе дать
Code
1
del2; operator; command
Тот del*, который находится самым ближним к command. Это нужно для получения правильных значений, чтобы определить начало текста, который будет вместо operator;
Вот переменные indexPtr1 и indexPtr2 запоминают индексы вхождения и потом вычисляя длину найденогоо первой искомой комбинации и второй, вычисляю длину текста - operator.

Извините, если запутано, по другому не знаю как пояснить, надеюсь вы поймёте меня. Спасибо.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
29.01.2010, 13:52  [ТС]
Всем привет. Вопрос такой. Имеется файл в строках которого очень много лишних пробелов. Подскажите, если есть более лучший код, чтобы удалить все лишние пробелы, кроме одного, например строка:
Code
1
Это       тестовая          строка                 кода,      используется     приложением
Должна прийти в виду
Code
1
Это тестовая строка кода, используется приложением
Количество пробелов варьируется и не стабильно, может быть чётное количество или нечётное.

Сейчас делаю так. Заменяю два пробела одним.

C++
1
2
3
4
5
6
7
...
   TStringList *list = new TStringList();
   list->LoadFromFile("text.txt");
   
   for(int i = 0; i < list->Count + 10; i++)  // Прибавляю +10 так как иногда не хватает лишних проходов для замены всех пробелов.
      list->Text = StringReplace(list->Text, "  ", " ", TReplaceFlags()<<rfReplaceAll);
...
Пробовал сначала заменять два пробела подчёркиванием, а потом символ подчёркивания удалять, но в этом случае имеется косяк, он работает только для нечётного количества пробелов, а когда количество пробелов чётное удаляются все пробелы.
C++
1
2
3
4
...
   list->Text = StringReplace(list->Text, "  ", "_", TReplaceFlags()<<rfReplaceAll);
   list->Text = StringReplace(list->Text, "_", "", TReplaceFlags()<<rfReplaceAll);
...
В общем, как одной операцией заменить все лишние пробелы одним? Желательно без цикла.

Спасибо.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
09.02.2010, 18:02
C++
1
2
while ( s.Pos("  ") )
    s.Delete(s.Pos("  "), 1);
по ключу
C++
1
std::string sf[2] = { "Reg ", "ROOTKIT" };
Вложения
Тип файла: rar t'ca.rar (19.9 Кб, 91 просмотров)
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
09.02.2010, 18:14  [ТС]
mirso, Благодарю за помощь и турброреактивный истребитель.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.02.2010, 17:29  [ТС]
Ребята, приветы! В общем вот такой вопрос. Ниже, приведён пример текстового лога. Зелёным я выделил строки, которые нужно извлекать. Вопрос вот в чём:

1. Как определить полное имя файла в строке, которая может содержать в своём имени путей точку или точки.
2. В имени расширения файла может быть от 2-х до 8-ми символов (пример расширения: .db, .jpeg, .manifest). Любое произвольное расширение.
3. Имя папки Windows может быть произвольным. Буква диска может быть отлична от C:

Code
1
2
3
4
5
6
7
...
Reg HKLM\SYSTEM\ControlSet004\Services\ovfsthofevdqurbcfdwtquersfnxwikxvufwux\main\tasks\0000000004@url [COLOR="DarkGreen"][B]http://f1.catch-you.ru/files/winsetupsm.exe[/B][/COLOR]
Library [COLOR="darkgreen"][B]C:\WINDOWS.0\system32\comctl32.dll[/B][/COLOR]:_rc_db_5.1.2600 (*** hidden *** ) @ C:\WINDOWS\system32\rundll32.exe [3804] 0x10000000 
ADS [COLOR="darkgreen"][B]C:\System Volume Information\_restore{45892D38-A0BF-43F9-8C9F-96715222A8FE}\RP214\Temp.01\A0037131.dll[/B][/COLOR]:_rc_db_5.1.2600 62464 bytes executable
File [COLOR="darkgreen"][B]C:\RECYCLER\S-1-5-21-1085031214-1708537768-682003330-1004\Dc56\FastReport_4.011_FullSource\FastReport 4\Extra\New DB Engine\NewEngine.res[/B][/COLOR] 876 bytes
File [B][COLOR="DarkGreen"]C:\WINDOWS\system32\WindowsLogon.manifest[/COLOR][/B]
...
Как можно из этих строк извлечь только полный путь к файлу. Чтобы из примера выше, на выходе получилось эти файлы\строки
Code
1
2
3
4
5
http://f1.catch-you.ru/files/winsetupsm.exe
C:\WINDOWS\system32\comctl32.dll 
C:\System Volume Information\_restore{45892D38-A0BF-43F9-8C9F-96715222A8FE}\RP214\A0037131.dll
C:\RECYCLER\S-1-5-21-1085031214-1708537768-682003330-1004\Dc56\FastReport_4.011_FullSource\FastReport 4\Extra\New DB Engine\NewEngine.res
C:\WINDOWS\system32\WindowsLogon.manifest
С реализацией, думаю, справлюсь сам, подкиньте идею. Спасибо.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
22.02.2010, 19:47
Maestro, ну первое - понятно как.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------------------------------------------------------------------------
#include <sstream>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::string t = ".exe";
    //---------------------
    std::string s = "Reg HKLM\\SYSTEM\\ControlSet004\\Services\\ovfsthofevdqurbcfdwtquersfnxwikxvufwux\\main\\tasks\\0000000004@url [url]http://f1.catch-you.ru/files/winsetupsm.exe[/url] ";
    std::istringstream is ( s );
    while ( is >> s )
    {
        if ( s.find ( t ) != std::string::npos )
        {
            ShowMessage ( s.c_str() );
            break;
        }
    }
}
//---------------------------------------------------------------------------
Code
1
Reg HKLM\SYSTEM\ControlSet004\Services\ovfsthofevdqurbcfdwtquersfnxwikxvufwux\main\tasks\0000000004@url [COLOR="DarkGreen"][B]http://f1.catch-you.ru/files/winsetupsm.exe[/B][/COLOR]
Code
1
http://f1.catch-you.ru/files/winsetupsm.exe
**************************************** ****
а второе?(обрезать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
#include <sstream>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::string t = ".dll";
    //---------------------
    std::string s = "Library C:\\WINDOWS.0\\system32\\comctl32.dll:_rc_db_5.1.2600 (*** hidden *** ) @ C:\\WINDOWS\\system32\\rundll32.exe [3804] 0x10000000";
    std::istringstream is ( s );
    while ( is >> s )
    {
        if ( s.find ( t ) != std::string::npos )
        {
            s.erase(s.find ( t ) + 4, s.end() - s.begin() - 4);
            ShowMessage ( s.c_str() );
            break;
        }
    }
}
//---------------------------------------------------------------------------
Code
1
Library [COLOR="DarkGreen"][B]C:\WINDOWS.0\system32\comctl32.dll[/B][/COLOR]:_rc_db_5.1.2600 (*** hidden *** ) @ C:\WINDOWS\system32\rundll32.exe [3804] 0x10000000
Code
1
C:\WINDOWS\system32\comctl32.dll
всё по такому принципу в цикле
std::string t[n] = {".dll", ".exe", ...};
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.02.2010, 21:20  [ТС]
Не факт что расширение может быть .exe, оно может быть .dll и .sys и любое другое...
Цитата Сообщение от mirso Посмотреть сообщение
C++
1
std::string t = ".exe";
Цитата Сообщение от mirso Посмотреть сообщение
всё по такому принципу в цикле
std::string t[n] = {".dll", ".exe", ...};
Ага, значит тут нужно перечислить все необходимые расширения. Этого я как раз и хотел бы избежать
Цитата Сообщение от Maestro Посмотреть сообщение
В имени расширения файла может быть от 2-х до 8-ми символов (пример расширения: .db, .jpeg, .manifest). Любое произвольное расширение.
Цитата Сообщение от mirso Посмотреть сообщение
а второе?(обрезать)
Да, нужна первая часть до символа @. Я этот пример делаю так. Дальше думал через Pos(":\") определять начало имени, т.к. эти два символа :\ всегда есть в пути после буквы диска. А вот с последней точкой перед расширением стабильного ничего не придумал - LastDelimiter.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
...
   TStringList *TokenLibAT = new TStringList();
   TSysCharSet chAT;
   chAT<<'@';
 
   for(int i = 0; i < GeneralList->Count; i++){
      ExtractStrings(chAT, chAT, GeneralList->Strings[i].c_str(), TokenLibAT);
 
      // На выходе в TokenLibAT получаю две строки и работаю с TokenLibAT->Strings[0]
      // Strings[0] = Library C:\WINDOWS.0\system32\comctl32.dll:_rc_db_5.1.2600 (*** hidden *** )
      // Strings[1] = C:\WINDOWS\system32\rundll32.exe [3804] 0x10000000 
    }   
...
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
22.02.2010, 21:56
Цитата Сообщение от Maestro Посмотреть сообщение
Ага, значит тут нужно перечислить все необходимые расширения. Этого я как раз и хотел бы избежать
а почему?
Цитата Сообщение от Maestro Посмотреть сообщение
В имени расширения файла может быть от 2-х до 8-ми символов (пример расширения: .db, .jpeg, .manifest).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
#include <sstream>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::string t[2] = {".dll", ".manifest"};
    //---------------------
    std::string s = "File C:\WINDOWS\system32\WindowsLogon.manifest12345";
 
    std::istringstream is ( s );
    while ( is >> s )
    {
      for ( size_t i = 0; i < 2; ++i )
      if ( s.find ( t[i] ) != std::string::npos )
      {
          s.erase( s.find ( t[i] ) + t[i].length(), s.length() - s.find ( t[i] ) + t[i].length() );
          ShowMessage ( s.c_str() );
          break;
      }
    }
}
//---------------------------------------------------------------------------
на выходе
Code
1
C:\WINDOWS\system32\WindowsLogon.manifest
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
22.02.2010, 22:28  [ТС]
Цитата Сообщение от mirso Посмотреть сообщение
а почему?
Чтобы не ограничиваться файлами строго определённого типа.
Цитата Сообщение от mirso Посмотреть сообщение
std::string t[2] = {".dll", ".manifest"};
Это жёсткая привязка к расширениями, например вирус TDSS создаёт ещё вредный файл с расширением .db, .sys, а также оставляет следы ввидет текстовых логов .log. Также могут попадать под удаление файлы с расширением .ocx, .cur и др.
Перечислять все типы файлов, не выгодно, легко пропустить какой-то или задать предпосылку для пропуска нового типа файла созданного вирусом в будущем.

mirso, код протестю уже завтра.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
11.03.2010, 11:34  [ТС]
Вот вот такой вопрос нарисовался. В программе есть внутренний фиксированый список с именами служб Windows. Одна строка - одно имя службы.
Code
1
2
3
4
5
TlntSvr
BITS
AliIde
Npfs
и т.д. по списку
Я хочу сделать дополнительный пользовательский список служб, имена этих служб будут храниться в файле LegalService.txt. И теперь мне нужно чтобы внешний список из файла LegalService.txt добавлялся во внутренний список ListLegalSvc, чтобы программа работала с одним списком. Придумал так. Но хотя список из файла LegalService.txt добавляется во внутренний список ListLegalSvc, тем не менее добавленую часть программа как будто не видит.
C++
1
2
3
4
5
6
7
8
9
...
   TStringList *temp = new TStringList();
 
   if(FileExists("LegalService.txt")){
      temp->LoadFromFile("LegalService.txt");
      ListLegalSvc->Append(temp->Text);
     }
   delete temp;
...
Такое ощущение, что список нужно как-то обновить, что ли? Зато если сохранить сразу же в файл, то добавленая часть сохраняется, правда появляется пустая строка между основным и добавлеными строками
C++
1
ListLegalSvc->SaveToFile("text.txt");
Выкрутился так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
   TStringList *ListLegalSvc = new TStringList();
...
   TStringList *temp = new TStringList();
 
   if(FileExists("LegalService.txt")){
      temp->LoadFromFile("LegalService.txt");
      ListLegalSvc->Append(temp->Text);
      ListLegalSvc->Text = StringReplace(ListLegalSvc->Text, "\r", "", TReplaceFlags()<<rfReplaceAll);
     }
   delete temp;
...
Вот хочу узнать, можно как-то попроще сделать? И почему первый вариант с добавлением не давал результата?

Спасибо.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
11.03.2010, 12:24
Цитата Сообщение от Maestro Посмотреть сообщение
правда появляется пустая строка между основным и добавлеными строками
Она возможно не появляется, а она просто уже там была(пустая строка)
Ее просто нужно удалить с помощью TrimRight()
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
11.03.2010, 13:42  [ТС]
Цитата Сообщение от mirso Посмотреть сообщение
Она возможно не появляется, а она просто уже там была(пустая строка)
Возможно, без понятия, только что проверял снова, пустая строка уже отсутствует и не появляется. Само прошло что ли?

Но вот количество добавленых строк не определяется правильно. К примеру, внутренний список содержал 10 строк. Что и показывает проверка до добавления строк из внешнего списка.

После добавления, скажем 5 строк из внешнего списка LegalService.txt, список ListLegalSvc должен же быть 15, а
C++
1
ListLegalSvc->Count;
показывает все те же 10. Пока вот это не применишь, так и будет показывать 10 вместо 15, хотя в списке присутствуют добавленые строчки. Что подтверждается проверкой сохранением в файл.
C++
1
ListLegalSvc->Text = StringReplace(ListLegalSvc->Text, "\r", "", TReplaceFlags()<<rfReplaceAll);
Почему так? Я без понятия.
0
11 / 11 / 7
Регистрация: 23.12.2009
Сообщений: 300
12.03.2010, 01:32
проверка длинны введенной строки
C++
1
if(Length(LabeledEdit3->Text)<4)
а оно мне ошибку выдает
[BCC32 Error] Unit1.cpp(191): E2268 Call to undefined function 'Length'
все уже понял
C++
1
if(LabeledEdit3->Text.Length()<4)
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
06.04.2010, 13:56  [ТС]
Всем привет. Ребята нужна помощь, вопрос простой, но мне кажется это невозможно сделать или я не знаю как. Работаю с ini-файлом, в котором хранятся некоторые рекомендации для необходимых случаев. Переменные Sections1, Sections2 выводят полученый текст потом в RichEdit. Всё работает, никаких проблем. Вот код:
Исходный код
Code
1
2
3
4
5
[Section1]
Text="<<< Необходимая рекомендация для случая "А""
 
[Section2]
Text="<<< Необходимая рекомендация для случая "Б""
C++
1
2
3
4
5
6
...
   TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"Base\\Recommendations.txt");
   
   AnsiString Sections1 = Ini->ReadString("Section1", "Text", "<<< Случай "А"");
   AnsiString Sections2 = Ini->ReadString("Section2", "Text", "<<< Случай "Б"");
...

Меня интересует вот что. Можно ли каким-то образом в значениях - Text="" вести запись, чтобы при выводе можно было начать с новой строки - \n. Вот например текст:
Code
1
Text="<<< Необходимая рекомендация для случая "Б": \n 1. Используем режим 1. \n 2. Используем режим 2. \n 3. Используем режим 3"
И чтобы на выходе получилось так:
Code
1
2
3
4
<<< Необходимая рекомендация для случая "Б":
1. Используем режим 1.
2. Используем режим 2.
3. Используем режим 3.
Если можно сделать, то как? Если никак нельзя - так и напишите. Спасибо.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
06.04.2010, 19:06
В RichEditOnChange пишешь такой код:
C++
1
2
 RichEdit1->Text=StringReplace(RichEdit1->Text,"/n","\r\n",TReplaceFlags()<<rfReplaceAll);
 RichEdit1->SelStart=RichEdit1->Text.Length();
Добавлено через 1 минуту
Когда напишешь "/n" строка будет пересена. Только "\n" так писать нельзя: не перенесет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2010, 19:06
Помогаю со студенческими работами здесь

Класс для работы сo строками
Помогите пжл разработать следующие элементы класса: Конструктор, позволяющий создать строку из n символов Конструктор в данном коде...

Класс для работы сo строками
Помогите пжл разработать следующие элементы класса: Конструктор, позволяющий создать строку из n символов Конструктор в данном коде...

Класс для работы со строками
Нужно написать класс работы со строками и один метод (сложение строк). Помогите пожалуйста сделать, а то не могу разобраться с классом

Библиотека для работы со строками
Нужно определить результат выполнения фрагмента программы: char str1=&quot;C++ language&quot;; char *str2=&quot;12345&quot;; int n=13; ...

Функции для работы со строками в VB
Помогите со строками. Какие есть функции для обработки строк? В хелпе ничего разобрать не смог, а очень надо.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru