Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Конвертация строки

03.09.2013, 13:25. Показов 2216. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня, ребята подскажите имею строки вида
Code
1
2
#Постоянное значение:-1,(+99):Привет всем
http://адрес
Нужно преобразовать к виду -
Code
1
(+99):Привет всем,http://адрес
Я написал алгоритм с двух действий -
Получаю строку начинающуюся с http и получаю строку между http и 1, - но так долго идёт обработка , может есть другой более быстрый способ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.09.2013, 13:25
Ответы с готовыми решениями:

Конвертация строки в число
Здравствуйте мне нужна ваша помощь чтобы исправить ошибку при компиляции (Смотрите вложения) Вот полный исходник. ...

Конвертация строки 1361723049 в строку df324-rg901-jl437-lk103
Всем привет!:yes: Посоветуйте как можно осуществить следующее действие: как из цифр - 1361723049 (могут быть как 10 значными так и...

Конвертация
Подскажите пожалуйста код как считать в бинарном виде файл и вывести его в виде 0 и 1 и соответственно записать файл в бинарном виде

17
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
03.09.2013, 22:38
#include <StrUtils.hpp>
// . . .
AnsiString stroka = "<Трехглазый мальчик> - лучшая игра на Денди после <Боевых жаб>";
// AnsiReplaceStr - замена с учетом регистра символов, AnsiReplaceText - без учета
или использовать регулярные выражения
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
04.09.2013, 00:24  [ТС]
gunslier, Регуляркой не вышло у меня
Пока такое решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    TStringList *List = new TStringList;
    List->Text=Memo1->Text;
    String Str;
    for(int i=0; i<List->Count; i++)   {
 
        if (List->Strings[i].Pos("-1"))
        {
            Str = List->Strings[i].SubString(List->Strings[i].Pos("-1")+3,1000);
            Memo2->Lines->Add(Str);
        }
        if (List->Strings[i].Pos("http"))
        {
            Str = List->Strings[i].SubString(List->Strings[i].Pos("http"),1000);
            Memo2->Lines->Add(Str);
        }
 
    }
    delete List;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
04.09.2013, 14:23
Ddv122, я правильно понимаю, что вот этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "RegExpr.hpp"
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TRegExpr *re = new TRegExpr;
    re->InputString = Memo1->Lines->Text;
    re->ModifierM = true;
    re->Expression = "(^(#[^\\-]*)-1,)";
    if(re->Exec(re->InputString))
    {
        Memo2->Lines->Text = re->Replace(re->InputString, "", false);
    }
    delete re;
}
делает то же самое? К тому же он сохраняет те строки, которые не содержат "#Постоянное значение:-1", в первоначальном виде..
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
04.09.2013, 23:34  [ТС]
UI, спасибо - шикарно
Только вот появилась 2 проблема - как мне получить (+99):Привет всем это и это htp://адрес - отдельно

C++
1
2
3
4
5
6
7
8
9
if (List->Strings[i].Pos("-1"))
* * * * {
* * * * * * Str = List->Strings[i].SubString(List->Strings[i].Pos("-1")+3,1000);
* * * * * * Memo2->Lines->Add(Str);
* * * * }
* * * * if (List->Strings[i].Pos("http"))
* * * * {
* * * * * * Str = List->Strings[i].SubString(List->Strings[i].Pos("http"),1000);
* * * * * * Memo2->Lines->Add(Str2);
т.е что бы мог бы я сделать
C++
1
 Memo2->Lines->Add(Str + "12345689" + Str2 + Str);
но с вашим примером?
Уж простите на назойливость...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
05.09.2013, 00:04
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    TRegExpr *re = new TRegExpr;
    re->InputString = Memo1->Lines->Text;
    re->ModifierM = true;
    re->Expression = "(^(#[^\\-]*)-1,)(.*?)\\n(.*?)$";
    re->Compile();
    if(re->Exec(re->InputString))
    {
        do
        {
            // Match[0] = "#Постоянное значение:-1,(+99):Привет всем\r\nhttp://адрес"
            // Match[1] = "#Постоянное значение:-1,"
            // Match[2] = "#Постоянное значение:-1"
            // Match[3] = "(+99):Привет всем\r"
            // Match[4] = "http://адрес "
            Memo2->Lines->Add(re->Match[3] + re->Match[4]); // Можно убрать из Match[3] \r
        }
        while (re->ExecNext());
    }
    delete re;
Дальше разберешься?
2
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
05.09.2013, 00:17  [ТС]
UI, Спасибо огромное , разберусь конечно
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.12.2014, 01:25  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
(^(#[^\\-]*)-1,)(.*?)\\n(.*?)$
Ребята прошу помощи
C++
1
(^(#[^\\-]*)-1,)(.*?)\\n    //идеально
не много изменилось ситуация (исключение появилось) и ссылка :// может быть и не наследующей строчке а через строку
т.е
Code
1
2
3
#Постоянное значение:-1,(+99):Привет всем
Доброй ночи
://адрес
как поправить регулярку что бы она искала если не найдена на следующей строке искать на другой ?
т.е типа
C++
1
(^(#[^\\-]*)-1,)(.*?)\\n(.*?)\\n(.*?)$
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
15.12.2014, 21:35
Ddv122, и что в результате обрабтки
Code
1
2
3
#Постоянное значение:-1,(+99):Привет всем
Доброй ночи
http://адрес
надо получить?
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.12.2014, 23:51  [ТС]
Грубо говоря есть список

Code
1
2
3
4
5
6
7
#Постоянное значение:-1,Привет всем 1
адрес 1 //не  обязательно http 
#Постоянное значение:0,Привет всем 2
адрес 2  //не  обязательно http 
#Постоянное значение:2,Привет всем 3
Доброй ночи  лишняя строка (может быть, а но может и не быть ) 
адрес 3 //не  обязательно http
нужно получить 2 колонки

1
Code
1
2
3
Привет всем 1
Привет всем 2
Привет всем 3
C++
1
(^(#[^\\-]*)-1,)(.*?)
- обрабатывает идеально 1 колонку, со всеми нюансами и тд (Match[3] )
2
Code
1
2
3
адрес 1 
адрес 2
адрес 3
По моему познанию нужно использовать модификатор X (для URL парсинга) - но тогда не работает 1 часть регулярного выражения

При такой регулярке
C++
1
re->Expression = "(^(#[^\\-]*)-1,)(.*?)\\n(.*?)$";
попадается место последней ссылки - строка
Доброй ночи лишняя строка (может быть, а но может и не быть )
а нужна сcылка
те парсим слово после запятой (1 или 2) и на следующей (или через строку) ссылку ( но не обязательно Http ) ... но думаю подойдет (://)
Извиняюсь за надоедливость
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
16.12.2014, 00:13
C++
1
re->Expression = "(^(#[^,]*),)(.*?)\\n((://.*?)|(.*?))\\n$";
, в Match[3] будет содержимое первой колонки, в Match[4] (начиная с символов :// и дальше - содержимое второй колонки)
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
16.12.2014, 13:49
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

А вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    TRegExpr *re = new TRegExpr;
    re->InputString = Memo1->Lines->Text;
    re->ModifierM = true;
    re->Expression = "#([^,]*),([^\\n]*)\\n(([^#h]*\\n)?((http://(.*?))\\n))";
 
    re->Compile();
    if(re->Exec(re->InputString))
    {
        do
        {
            Memo2->Lines->Add(re->Match[2] + "\n" + re->Match[6]); // Можно убрать из Match[3] \r
        }
        while (re->ExecNext());
    }
    delete re;
из содержимого
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
https://www.cyberforum.ru/cpp-builder/1
https://www.cyberforum.ru/cpp-builder/2
#Постоянное значение:-1,Привет всем 0
#Постоянное значение:-1,Привет всем 1
https://www.cyberforum.ru/cpp-builder/3
https://www.cyberforum.ru/cpp-builder/4
#Постоянное значение:0,Привет всем 2
https://www.cyberforum.ru/cpp-builder/5
#Постоянное значение:2,Привет всем 3
Доброй ночи  лишняя строка (может быть, а но может и не быть ) 
https://www.cyberforum.ru/cpp-builder/6
#Постоянное значение:2,Привет всем 4
#Постоянное значение:2,Привет всем 5
https://www.cyberforum.ru/cpp-builder/7
https://www.cyberforum.ru/cpp-builder/8
получаем
Code
1
2
3
4
5
6
7
8
Привет всем 1
https://www.cyberforum.ru/cpp-builder/3
Привет всем 2
https://www.cyberforum.ru/cpp-builder/5
Привет всем 3
https://www.cyberforum.ru/cpp-builder/6
Привет всем 5
https://www.cyberforum.ru/cpp-builder/7
2
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
19.12.2014, 19:45  [ТС]
volvo, Спасибо огромное
Извиняюсь что подымаю тему, но не не могу
понять почему у меня не получается , к примеру вот список

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ftp://www.cyberforum.ru/cpp-builder/1
asder://www.cyberforum.ru/cpp-builder/2
#Постоянное значение:-1,Привет всем 0
#Постоянное значение:-1,Привет всем 1
rtmp://www.cyberforum.ru/cpp-builder/3
https://www.cyberforum.ru/cpp-builder/4
#Постоянное значение:0,Привет всем 2
https://www.cyberforum.ru/cpp-builder/5
#Постоянное значение:2,Привет всем 3
Доброй ночи *лишняя строка (может быть, а но может и не быть ) 
mmsh://www.cyberforum.ru/cpp-builder/6
#Постоянное значение:2,Привет всем 4
#Постоянное значение:2,Привет всем 5
rtmpe://www.cyberforum.ru/cpp-builder/7
rtmpe://www.cyberforum.ru/cpp-builder/8
пытаюсь отвязать регулярку от http - зная что ссылка на новой строке и присутствует ://
значит вместо
C++
1
#([^,]*),([^\\n]*)\\n(([^#h]*\\n)?(([url]http://(.*?))\\n[/url]))
будет
C++
1
#([^,]*),([^\n]*)\n(([^#^(.*?)://]*\n)?((^(.*?)://(.*?))\n))
Но всё рушится
Code
1
2
Привет всем 0
www.cyberforum.ru/cpp-builder/3
ну и пытался протокол соединить с ссылкой в конце - тоже результата нет...Ребят ткните носом пожалуйсто, чувствую что где то близко , но что то не так..
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
19.12.2014, 20:11
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Ну смотри, вот такое выражение, скажем:
C++
1
re->Expression = "#([^,]*),([^\\n]*)\\n(([^#:/]*\\n)?((([a-z]*)://(.*?))\\n){1,1})";
на твоих данных вылавливает:
Привет всем 1
rtmp://www.cyberforum.ru/cpp-builder/3
Привет всем 2
https://www.cyberforum.ru/cpp-builder/5
Привет всем 3
mmsh://www.cyberforum.ru/cpp-builder/6
Привет всем 5
rtmpe://www.cyberforum.ru/cpp-builder/7
Это надо было?
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
19.12.2014, 20:30  [ТС]
volvo, Спасибо огромное !!!!!
Шикарно
Я кажись автор темы ,а функции лучшее сообщение нет почему то ....
и есть маленьких 2 нюанса ещё

Code
1
2
3
4
#Постоянное значение:2,Привет всем 3
Доброй ночи лишняя строка (может быть, а но может и не быть ): 
mmsh://www.cyberforum.ru/cpp-builder/6
#Постоянное значение:2,Привет всем 3
если во второй строке имеется символ в строке : или / ( вместе или по раздельности) - регулярка не работает и не важно в конце или середине символы ...
и если убрать полностью 4 строку - так же регулярка не работает ( видно ищет /n)
ну тут я уже сам разберусь с этими нюансами

Владимир, спасибо вы лучший
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
19.12.2014, 22:29
Цитата Сообщение от Ddv122 Посмотреть сообщение
и если убрать полностью 4 строку - так же регулярка не работает ( видно ищет /n)
Ну, это-то проще всего поправить, добавь в последнюю группу либо \n либо конец текста:
C++
1
re->Expression = "#([^,]*),([^\\n]*)\\n(([^#:/]*\\n)?((([a-z]*)://(.*?))(\\n|$)){1,1})";
, будет работать.

С остальным - чуть сложнее, будет время - посмотрю...
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
04.01.2015, 03:10  [ТС]
Доброго времени суток !)
С наступившем новым годом
Свою проблему решил так , случайно , но вроде работает
C++
1
re->Expression = "#([^,]*),([^\\n]*)\\n(([^\\d/]*\\n)?((([a-z]*)://(.*?))(\\n|$)){1,1})$";
volvo, спасибо огромное за помощь
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
03.06.2016, 20:41  [ТС]
volvo, давно хотел спросить
Можно ли сделать исключения в регулярках ?
Что бы пропускало строку если в ней есть к примеру слово ( тэг) div
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2016, 20:41
Помогаю со студенческими работами здесь

Конвертация типов
Здравствуйте! Ребята помогите решить проблему вылетает ошибка вот здесь я выделил жирным void PrintNetFiles(LPWSTR server) { ...

Конвертация строк.
Существует задача преобразования текста, читаемого из файла в кодировке ANSI в кодировку ASCII, чтобы русский текст нормально отражался в...

Конвертация word в pdf
Возник интересный вопрос. Можно ли написать программу для конвертации doc в word, самому?

Конвертация аудио форматов
Может быть, кто-нибудь с сим сталкивался? Буду очень благодарна!

Конвертация из AnsiString в WideChar
Есть ли возможность конвертировать из AnsiString в WideChar потому как в хелпе написано что, int __fastcall MessageBox(const...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru