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

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

25.11.2009, 14:10. Показов 21606. Ответов 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
06.04.2010, 20:30  [ТС]
Студворк — интернет-сервис помощи студентам
Ni'Tan, Так я тоже хотел сделать, только вместо /n другой символ-сигнальной метки, который бы потом заменял на /n. Но впрочем хорошо. Раз мнения совпали, значит выбора нет, сделаю так. Спасибо.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
06.04.2010, 21:06
Так можно любой сивол поставить. "*", "%" что угодно, только не "\n".
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
06.04.2010, 21:41  [ТС]
Ni'Tan, Да я понял, хотел звёздочку * ставить.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
17.04.2010, 01:24
Цитата Сообщение от Maestro Посмотреть сообщение
ListLegalSvc->Append(temp->Text)
Цитата Сообщение от Maestro Посмотреть сообщение
ListLegalSvc должен же быть 15
Цитата Сообщение от Maestro Посмотреть сообщение
показывает все те же 10.
Count привязан к Append и delete
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
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TStringList *LS1 = new TStringList();
    TStringList *LS2 = new TStringList();
 
    LS1->Append("123");
    LS1->Append("456");
    LS1->Append("789");
 
    LS2->Append("abc");
    LS2->Append("def");
    LS2->Append("ghi");
    //--------------------------------
    LS2->Text = LS1->Text + LS2->Text;
    //--------------------------------
    Memo1->Text = LS2->Text;
 
    ShowMessage( "LS2->Count == " + (String)LS2->Count );
 
    delete LS2;
    delete LS1;
}
//---------------------------------------------------------------------------
1
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
19.04.2010, 15:21  [ТС]
mirso, Спасибо, мне больше понравился способ, который ты ещё написал в личку. Решил использовать второй способ, он проще и его хватает для необходимых целей.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
   LS2->AddStrings(LS1);
...
 
   TStringList *ListLegalSvc = new TStringList();
...
   TStringList *temp = new TStringList();
 
   if(FileExists("LegalService.txt")){
      temp->LoadFromFile("LegalService.txt");
      ListLegalSvc->AddStrings(temp);
     }
   delete temp;
...
О функции AddStrings знал ведь, но не понимал её назначения в целом.
void AddStrings(Tstrings* Strings) - Добавляет в список группу строк Strings типа TStrings.
Вопрос решён.
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
16.05.2010, 18:57  [ТС]
Друзья, просто катастрофа. Пол дня уграл на то чтобы понять где в программе глюки, глюк локализировал, но решения самостоятельно найти не могу.

Дело в том, что я загружаю методом перетаскивания файл .xml в список
C++
1
2
3
4
5
...
   STstringList *ListXML = TStringList();
 
   ListXML->LoadFromFile(FileName);
...
Всё бы ничего, но в самом файле .xml есть символы мягкого переноса, тоесть когда я его открываю через блокнот, то проблемные строки(ниже приведу проблемные строки), отображаются нормально, в строку, а когда я загружаю этот файл в список или хотя бы открываю в Word и отображаю непечатаемые знаки, тогда в загруженом списке я вижу символ мягкого переноса, это когда нажать Shift + Enter в конце строки такая стрелочка появляется. Мне же оооочень надо найти решение, которое позволило бы на выбор, игнорировать этот мягкий перенос или искать и заменять его на пробел, путём StringReplace или какой-нибудь другой путь обхода, потому что из-за него у меня неправильные расчёты в программе. Для вывода информации использую RichEdit свойство PlainText установлено в true.
Вот проблемные строки. Хочу чтобы в списке они были размещены так, как их видно здесь. Одна строка - одна единица информации
Code
1
2
3
4
5
6
7
8
9
10
11
  <ITEM File="р%Ђ|ИR srv" Name="SNDSrvcRSVPImapiService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|g srv" Name="SysmonLogDhcpTapiSrv" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|hc srv" Name="ScheduleFastUserSwitchingCompatibilityMDMCOMSysAppwuauservwuauserv" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|ђW srv" Name="NetDDEccISPwdSvcDnscacheSpooler" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|8V srv" Name="mnmsrvcVSSSAVScanBrowserstisvcstisvcnavapsvcdmadminERSvcLmHosts" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|А srv" Name="DhcpSysmonLogVSSdmserverTrkWksLightScribeServiceSwPrvSharedAccessccProxyMyWebSearchService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|0T srv" Name="LightScribeServiceNtmsSvcccISPwdSvcDcomLaunchNSCServiceHidServ" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|HZ srv" Name="DnscacheSysmonLogupnphostdmserverTrkWksdmserverTrkWks" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|?j srv" Name="dmadminERSvcLmHostsBITSNlaIrmon" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|рX srv" Name="AudioSrvMyWebSearchServiceRpcSsNetDDEdsdmVSSDnscacheSysmonLog" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ| [ srv" Name="AtimnmsrvcSSDPSRVRasManSSDPSRVMyWebSearchService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
А в программе из-за этого непечатного\непонятного символа проблемные строки переносятся вот так.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  <ITEM File="р%Ђ|ИR
 srv" Name="SNDSrvcRSVPImapiService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|g
 srv" Name="SysmonLogDhcpTapiSrv" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|hc
 srv" Name="ScheduleFastUserSwitchingCompatibilityMDMCOMSysAppwuauservwuauserv" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|ђW
 srv" Name="NetDDEccISPwdSvcDnscacheSpooler" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|8V
 srv" Name="mnmsrvcVSSSAVScanBrowserstisvcstisvcnavapsvcdmadminERSvcLmHosts" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|А
 srv" Name="DhcpSysmonLogVSSdmserverTrkWksLightScribeServiceSwPrvSharedAccessccProxyMyWebSearchService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|0T
 srv" Name="LightScribeServiceNtmsSvcccISPwdSvcDcomLaunchNSCServiceHidServ" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|HZ
 srv" Name="DnscacheSysmonLogupnphostdmserverTrkWksdmserverTrkWks" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|?j
 srv" Name="dmadminERSvcLmHostsBITSNlaIrmon" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ|рX
 srv" Name="AudioSrvMyWebSearchServiceRpcSsNetDDEdsdmVSSDnscacheSysmonLog" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
  <ITEM File="р%Ђ| [
 srv" Name="AtimnmsrvcSSDPSRVRasManSSDPSRVMyWebSearchService" CheckResult="-1" Type="272" State="1" NationalName="Y"  />
Можно ли что-нибудь придумать?
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
16.05.2010, 20:11
Может глупость, но что если после загрузки в RichEdit через цикл суммировать каждую нечетную и четную строки???
Или вот так:
C++
1
RichEdit1->Text=StringReplace(RichEdit1->Text,"\r\n","",TReplaceFlagse()<<rfReplaceAll);
?
(Только все запишется в одну строку).
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
18.05.2010, 10:29  [ТС]
Цитата Сообщение от Ni'Tan Посмотреть сообщение
Может глупость, но что если после загрузки в RichEdit через цикл суммировать каждую нечетную и четную строки???
Не выход. Потому что из 274 строк которые загрузились, вот эти 12 проблемные, причём чёткой зависимости в том, где в каком месте\позиции строки, они появятся - нет.

Цитата Сообщение от Ni'Tan Посмотреть сообщение
Или вот так:
Пробовал, но там ведь не чистая новая строка - "\n", а мягкий перенос, вот скопируй проблемные строки в Word из первого списка и включи отображение непечатаемых символов, ты всё поймёшь.

Но в блокноте отображаются нормально. Собственно выход придумал такой, с использованием промежуточной загрузки в Memo, там эти мягкие переносы неиспользуются и списку текст передаётся уже нормальный:
C++
1
2
3
4
5
6
 ...
   STstringList *ListXML = TStringList();
 
   Memo1->Lines->LoadFromFile(FileName);
   ListXML->Text = Memo1->Text;
...
Это как акт отчаяния, но работает.

Добавлено через 16 часов 38 минут
Ну вот, теперь проблема с Memo Попался лог, который "рубит" строку. Если этот лог подгружать в список или открывать в Memo, то загрузится только до того места, в котором встретится непонятный символ "квадратик", на скрине указал стрелкой на него. Всё что после него как обрезается.



Если же использовать RichEdit то всё грузится нормально. Но с RichEdit проблема выше, когда попадётся лог в котором в именах файлов будут национальные(некирилические) символов, мягких переносов, есть шанс, что они будут обрабатываться некорректно.

Что делать? Самый лучший вариант, оставить RichEdit, но тогда надо решать вопрос из комментария №26

Обе ситуации нестандартны, но если в случае из 26 коммента, это предполагается, то в текущем вопросе вообще непонятно что. Если удалить этот "квадратик", тогда всё загружается нормально. Как быть? Посоветуйте что-нибудь?

Добавлено через 21 час 22 минуты
Вернул вместо Memo как и было раньше RichEdit. Боюсь сглазить, но вроде бы решилось установкой свойства PlainText=false у RichEdit.
1
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 1
16.05.2016, 00:24
Набросал недавно, может пригодится кому)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Memo1->Text="";
AnsiString str=Edit1->Text;
//удаляем пробелы и заменяем одним
while ( str.Pos("  ") )
{
    str.Delete(str.Pos("  "), 1);
}
str=str.Trim();
        while (str.Pos(" "))
        {
        Memo1->Lines->Add(str.SubString(1,str.Pos(" ")-1)); //выводим слово до пробела
        str.Delete(1,str.Pos(" "));  //удаляем слово до пробела
        }
Memo1->Lines->Add(str.SubString(1,str.Length())); //выводим остаток
Edit2->Text=Memo1->Lines->Count;//количество слов
Вложения
Тип файла: zip program.zip (514.1 Кб, 1 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2016, 00:24

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru