Вверх ↑
Этот топик читают: Гость
Ответов: 204
Рейтинг: 2
#1: 2020-06-10 21:55:26 ЛС | профиль | цитата
Подскажите пожалуйста.
Мне прилетает большой кусок текста без абзацев и строк, всё в слипку. Как мне после определенных слов расставить переносы на новую строку?
Слова для переноса всегда разные, но они только в конце строки и в предложении не попадаются.
примерно так:
приходит вот это:

"45/86- «Лорд» пакет. Пастель 78451682. свинец. Синий 785215 краб картон."

слова для переноса: "пакет, свинец, картон"

Получить надо вот такое:

" 45/86- «Лорд» пакет.
Пастель 78451682. свинец.
Синий 785215 краб картон. "

Вроде простенькая задачка, однако уже второй час туплю. Пните в правильном направлении, пожалуйста!
карма: 1

0
Ответов: 207
Рейтинг: 14
#2: 2020-06-10 22:50:56 ЛС | профиль | цитата
ogrif, Самый простой вариант.

Add(MainForm,2953706,175,245)
{
Width=489
Height=340
link(onCreate,16096727:doReplace,[])
}
Add(RE_Replace,16096727,245,259)
{
Expression="(пакет\.|свинец\.|картон\.)"
ReplaceStr="$1\r\n"
link(onReplace,1554879:doAdd,[])
link(SourceStr,2046533:Text,[])
}
Add(Memo,2046533,245,196)
{
Left=5
Top=5
Width=465
Height=140
Strings=#72:45/86- «Лорд» пакет. Пастель 78451682. свинец. Синий 785215 краб картон.|
}
Add(Memo,1554879,322,259)
{
Left=5
Top=150
Width=465
Height=150
}

карма: 2

0
Ответов: 204
Рейтинг: 2
#3: 2020-06-10 23:07:14 ЛС | профиль | цитата
Joiner,
Спасибо.

Я кончено уже додумался как это сделать при помощи компонента: Replace



Add(Memo,14896788,637,189)
{
Left=30
Top=10
Width=190
Height=185
Strings=#72:45/86- «Лорд» пакет. Пастель 78451682. свинец. Синий 785215 краб картон.|
ScrollBars=3
}
Add(Button,12228665,469,294)
{
Left=80
Top=225
link(onClick,2159373:doEvent1,[])
}
Add(Replace,2820489,763,413)
{
SubStr="картон"
DestStr="картон. \r\n"
link(onReplace,11106386:doWork2,[(807,419)(807,258)])
link(Str,459890:Var3,[(769,243)])
}
Add(Replace,6777326,637,294)
{
SubStr="пакет."
DestStr="пакет. \r\n"
link(onReplace,12320618:doWork3,[(681,300)])
link(Str,10886017:Var2,[])
}
Add(Replace,15352915,700,343)
{
SubStr="свинец."
DestStr="свинец. \r\n"
link(onReplace,11106386:doWork3,[(737,349)])
link(Str,459890:Var2,[])
}
Add(GetDataEx,10886017,637,238)
{
link(Data,14896788:Text,[])
}
Add(HubEx,12320618,677,252)
{
Angle=2
link(onEvent,14896788:doText,[(625,258)(625,216)])
}
Add(Hub,2159373,560,294)
{
OutCount=3
link(onEvent1,6777326:doReplace,[])
link(onEvent2,15352915:doReplace,[(615,307)(615,349)])
link(onEvent3,2820489:doReplace,[(601,314)(601,419)])
}
Add(GetDataEx,459890,700,238)
{
Angle=3
link(Data,10886017:Var3,[])
}
Add(HubEx,11106386,733,252)
{
Angle=2
link(onEvent,12320618:doWork2,[])
}




Но ваш вариант значительно лучше! Его и применю. Спасибо! ))

P.S. сам себе поразился. Настолько плевая задача и весь вечер протупил с ней! Наверно старею.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#4: 2020-06-11 09:16:48 ЛС | профиль | цитата
А так?

Add(MainForm,14400723,119,175)
{
Width=489
Height=340
link(onCreate,16096727:doReplace,[])
}
Add(RE_Replace,16096727,189,189)
{
Expression="([а-я]\. )"
ReplaceStr="$1\r\n"
link(onReplace,1554879:doText,[])
link(SourceStr,2046533:Text,[])
}
Add(Memo,2046533,189,126)
{
Left=5
Top=5
Width=465
Height=140
Strings=#72:45/86- «Лорд» пакет. Пастель 78451682. свинец. Синий 785215 краб картон.|
}
Add(Memo,1554879,266,168)
{
Left=5
Top=150
Width=465
Height=150
}

Редактировалось 1 раз(а), последний 2020-06-11 09:39:15
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8921
Рейтинг: 823
#5: 2020-06-11 09:24:16 ЛС | профиль | цитата
Или на IC


Add(MainForm,1686861,245,154)
{
Height=308
Position=1
}
Add(Memo,13325776,385,203)
{
Left=10
Top=60
Width=375
Height=195
}
Add(Edit,5747742,294,154)
{
Left=5
Top=5
Width=380
Text="45/86- «Лорд» пакет. Пастель 78451682. свинец. Синий 785215 краб картон. ABC"
}
Add(Button,4023732,245,203)
{
Left=155
Top=30
Caption="V V V"
link(onClick,6238456:doParse,[])
}
Add(InlineCode,6238456,294,203)
{
WorkPoints=#7:doParse|
EventPoints=#5:onRes|
DataPoints=#3:Str|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|26: _data_Data:THI_Event;|19: Str:THI_Event;|22: onRes: THI_Event;|4: |49: procedure doParse(var _Data:TData; Index:Word);|0:|5: end;|0:|14:implementation|0:|30:procedure THiAsmClass.doParse;|16:var s,ss:string;|14: i:integer;|5:begin|9: ss:='';|32: s:=ReadString(_Data, Str, '');|23: if s = '' then Exit;|26: for i:=1 to Length(s) do|8: begin|16: ss:=ss+s[i];|21: if s[i]='.' then|8: begin|66: if ((s[i+1]=' ') and (s[i+2] in ['A'..'Z','А'..'Я','Ё'])) then|10: begin|28: _hi_onEvent(onRes,ss);|13: ss:='';|9: end;|8: end; |7: end;|43: if ss='' then else _hi_onEvent(onRes,ss);|4:end;|0:|4:end.|
link(onRes,9720243:doTrim,[])
link(Str,5747742:Text,[])
}
Add(Trim,9720243,336,203)
{
Char=" "
link(onTrim,13325776:doAdd,[])
}

карма: 19

0
Ответов: 207
Рейтинг: 14
#6: 2020-06-11 11:26:09 ЛС | профиль | цитата
Tad писал(а):
А так?

Вариаций может быть сколь угодно.
(\D\. )

Смотреть нужно на конкретную задачу и на реальный текст.

Редактировалось 1 раз(а), последний 2020-06-11 11:52:05
карма: 2

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)