Вверх ↑
Ответов: 2059
Рейтинг: 131
#1: 2020-10-13 15:52:29 ЛС | профиль | цитата
NUB
Вот так более функционально.
Про UTF-8 и ANSI уже сказали + когда копипастишь откуда-то переключайся на русский язык.

Add(MainForm,15823276,329,77)
{
Width=1038
Height=399
link(onCreate,8923655:doRussianKbd,[])
}
Add(InlineCode,9341613,448,413)
{
WorkPoints=#6:doWork|12:doStrinOffer|0:|
EventPoints=#12:onHashString|8:onString|10:onProgress|13:onMaxProgress|6:onStop|0:|
DataPoints=#6:Param1|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|8: |10: public|45: Param1: THI_Event; { Верхние точки. } |27: onHashString: THI_Event; |21: onString: THI_Event;|23: onProgress: THI_Event;|26: onMaxProgress: THI_Event;|19: onStop: THI_Event;|49: Procedure doWork(var _Data:TData; Index:Word); |54: Procedure doStrinOffer(var _Data:TData; Index:Word);|1: |5: end;|2: |15: implementation|0:|5: var|61:aTableSize,Lenchange,IEnterEnd,IEnter,IEn,StringBL:integer; |31:aKey,Stringchange:ShortString; |25:Enter2,nochange: Boolean;|25:StringEnter,Value:String;|0:|35:Procedure THiAsmClass.doStrinOffer;|3:var|11:I: Integer;|13:C: PAnsiChar;|5:begin|8: begin|7:IEn:=0;|2: |35:for I := IEnter to Length(Value) do|14: begin|17: C :=@Value[I]; |67: if (C^ in ['.','?','…','!',#10]) or (I=(Length(Value)))then |28: begin |24: IEn:= IEn+1; |47: StringEnter:=Copy(Value, IEnter,IEn);|43: _hi_OnEvent(onString,StringEnter); |22: exit;|17: end;|25: Inc(IEn); |11: end; |8: end;|9: end; |1: |1: |29:Procedure THiAsmClass.doWork;|4:var |14: Res: String;|24: StrnoHash:ShortString;|19: ILen, I: Integer;|23: Iout, Len: Cardinal;|18: C2, C: PAnsiChar;|22: LastEnter: Boolean;|5:begin|10:IEnter:=1;|14:Enter2:= True;|9:Iout :=0;|8:Len :=0;|34: Value:= Readstring(_Data,Param1);|42: _hi_OnEvent(onMaxProgress,Length(Value));|36: SetLength(Res, Length(Value) * 2);|31: for I := 1 to Length(Value) do|6: begin|16: C :=@Value[I];|54: if C^ in ['А'..'я','0'..'9','Ё','ё','A'..'z'] then |68: // if not (C^ in [#13,' ','?','"','(',')','…','!','.', ';']) then|9: begin|16: Inc(Len);|28: StrnoHash[Len] := C^; |22: aKey[Len] := C^;|33: C := CharLower(@aKey[Len]);|25: LastEnter := False;|7: end|8: else|7: begin |22:// if (C^=#10) then|0:|25: if not LastEnter then |15: begin |27: SetLength(aKey, Len);|32: SetLength(StrnoHash, Len);|46: _hi_OnEvent(OnHashString,aKey); |7: |19: if nochange then |9: begin|26: for ILen := 1 to Len do |8: begin |13: inc(Iout); |7: // Тут|27:Res[Iout]:=StrnoHash[ILen] |5: end;|4: end|4:else|8: begin|30:for ILen := 1 to Lenchange do |8: begin |13: inc(Iout); |32: Res[Iout]:=Stringchange[ILen];|9: end; |9: end;|14: Len :=0;|24: LastEnter := True;|23: nochange :=False;|9: end;|16: inc(Iout);|28: Res[Iout] := Value[I];|7: end;|37: if C^ in ['.','?','…','!',#10] then|19://if C^ = #13 then|5:begin|57:// if not(C^ =#10) then IEnter:= I+2 else IEnter:= I+1;|64: C2 :=@Value[IEnter]; // if (C2^=#10) then IEnter:= IEnter+1;|17: IEnter:= I+1; |17: Enter2:=True; |12: end; |1: |27: _hi_OnEvent(onProgress,I);|6: end;|23: _hi_OnEvent(onStop,I);|25: SetLength(Res, Iout ); |4:end;|4:end.|
link(onHashString,455524:doEvent1,[])
link(onString,13129753:doAdd,[(736,426)(736,223)])
link(onProgress,13581921:doWork2,[(542,433)(542,447)])
link(onMaxProgress,10501999:doMax,[(566,440)(566,454)])
link(onStop,13581921:doWork3,[(543,447)(543,456)(606,456)])
link(Param1,13814007:Text,[])
}
Add(Memo,13814007,448,336)
{
Left=10
Top=5
Width=280
Height=305
Strings=#271:Я знал, что головной офис распавшейся корпорации «Надо придумать название» давно стал легендой в определенных кругах искателей приключений, авантюристов, всех, кто занимался охотой за артефактами, утраченными технологиями, не брезгуя при этом грабежом различных раскопок.|63:Поднявшись на тридцать седьмой этаж, я оказался словно в музее.|263:В шкафах и на широких столах скучало множество странных артефактов, частью ещё покрытых коркой красного марсианского песка. В глубине комнаты мужчина с подстриженными усами в грубой рубашке с открытым воротом оторвался от объекта, который он очищал мягкой кистью.|63: -Доктор Джонсон? Я – Юрий Петров. //Придумать имя и фамилию.|154: -Рад познакомиться с вами, профессор, - Джонсон бережно положил артефакт, затем поднялся, чтобы крепко пожать руку посетителя. – Вы не теряете времени.|194: -После того, как вы позвонили вчера вечером, мне удалось получить место на не правительственном транспорте идущем до лунной орбитальной станции, но об этом потом... Надеюсь, я вам не помешал?|124: -Вовсе нет. Мои ассистенты придут около девяти. Я тут занимался кое-какой работой, которую не доверяю их кривым ручонкам.|138: Я взглянул на предмет, который очищал археолог. Это было нечто, что диссонировало с общим фоном этой безмолвной и неподвижной выставки.|72: -Этот образец выглядит не особо по-марсиански, - прокомментировал он.|
ScrollBars=2
}
Add(Memo,6823695,777,42)
{
Left=305
Top=5
Width=300
Height=305
ScrollBars=2
}
Add(Button,3706599,336,287)
{
Left=40
Top=330
link(onClick,429272:doEvent1,[])
}
Add(Memo,5059864,798,245)
{
Left=615
Top=5
Width=95
Height=305
ScrollBars=2
}
Add(If_else,2725617,693,252)
{
link(onTrue,13325344:doEvent1,[(737,258)(737,251)])
link(Op2,9115182:Text,[])
}
Add(Hub,455524,497,413)
{
link(onEvent1,6823695:doAdd,[(644,419)(644,48)])
link(onEvent2,2725617:doCompare,[(602,426)(602,258)])
}
Add(Hub,429272,385,287)
{
OutCount=4
link(onEvent1,6823695:doClear,[(588,293)(588,55)])
link(onEvent2,5059864:doClear,[(595,300)(595,258)])
link(onEvent3,13129753:doClear,[(695,307)(695,230)])
link(onEvent4,4357956:doStart,[(411,314)(411,360)(352,360)(352,405)])
}
Add(Hub,13325344,749,245)
{
link(onEvent1,5059864:doAdd,[])
link(onEvent2,9341613:doStrinOffer,[(775,258)(775,342)(436,342)(436,426)])
}
Add(Edit,9115182,700,175)
{
Left=155
Top=330
Width=180
Text="петров"
}
Add(ProgressBarRush,10501999,651,441)
{
Left=385
Top=335
Width=390
Height=10
Caption=""
Point(doMax)
}
Add(Thread,4357956,364,399)
{
Delay=0
FastStop=0
link(onExec,9341613:doWork,[(422,405)(422,419)])
}
Add(Memo,13129753,991,217)
{
Left=720
Top=5
Width=300
Height=305
ScrollBars=2
}
Add(HubEx,13581921,602,441)
{
link(onEvent,10501999:doPosition,[])
}
Add(KeyboardLayout,8923655,448,84)
{
}
Леонид писал(а):
Это когда много и быстро надо

Просто я привык работать с тоннами текста, а так можно и на регулярных выражениях.

Add(Button,3126655,231,161)
{
Left=95
Top=535
link(onClick,4880804:doExecute,[])
}
Add(ODialog,4880804,294,161)
{
Filter="All|*.txt"
link(onExecute,8606974:doLoad,[(342,167)(342,104)])
}
Add(MainForm,4093148,238,98)
{
Width=673
Height=588
}
Add(Memo,8259123,498,194)
{
Left=425
Top=40
Width=235
Height=480
ScrollBars=2
Point(doSetSelStart)
}
Add(Edit,16768161,462,91)
{
Left=25
Top=5
Width=465
Height=30
Font=[MS Sans Serif,14,0,0,1]
Text="[а-яА-Я0-9-]+|[.,:;?!]+"
}
Add(Button,9345993,210,203)
{
Left=500
Top=5
link(onClick,2414294:doEvent1,[(264,209)(264,202)])
}
Add(RE_Search,5386917,378,175)
{
link(onMatch,999126:doEvent1,[(418,181)(418,167)])
link(SourceStr,8606974:Text,[(384,155)(363,155)])
link(Expression,16768161:Text,[(391,149)(468,149)])
}
Add(Button,10206297,273,224)
{
Left=575
Top=5
link(onClick,5386917:doExecNext,[(341,230)(341,188)])
}
Add(Hub,999126,427,161)
{
OutCount=4
link(onEvent1,8259123:doAdd,[(466,167)(466,200)])
link(onEvent2,7399570:doOperation,[(453,174)(453,237)(324,237)(324,300)])
link(onEvent3,15111858:doData,[(453,181)(453,241)(394,241)(394,300)])
}
Add(DoData,15111858,406,294)
{
link(onEventData,8606974:doSetSelLength,[(450,300)(450,212)(345,212)(345,125)])
link(Data,5386917:MatchLen,[(412,250)(398,250)])
}
Add(Math,7399570,336,294)
{
OpType=1
Op2=1
link(onResult,8606974:doSetSelStart,[(380,300)(380,209)(345,209)(345,118)])
link(Op1,5386917:MatchPos,[(342,250)(391,250)])
}
Add(Hub,2414294,287,196)
{
link(onEvent1,8259123:doClear,[(396,202)(396,207)])
link(onEvent2,5386917:doExec,[(339,209)(339,181)])
}
Add(PointHint,5338787,588,203)
{
Info=#13:(\d+) числа |6:[А-я]+|6:[^\s]+|
VAlign=0
Width=379
Height=172
}
Add(Scintilla,8606974,357,70)
{
Left=5
Top=40
Width=410
Height=480
Font=[Courier New,10,0,0,1]
Strings=#269:Свободно|вольно| бесцеремонно| беспрепятственно| гладко| легко| споро| необязательно| непринужденно| развязно| без стеснения| безнаказанно| беспрепятственно|бесцеремонно|беспрепятственно|гладко|легко|споро|необязательно|непринужденно|развязно|без стеснения|безнаказанно|217:свободного|вольного|беглого|легкого|вакантного|незанятого|незамещенного|беспрепятственного|безвозбранного|невозбранного|привольного|раздольного|вольготного|просторного|широкого|независимого|пустого|праздного|властного|198:свободное|вольное|беглое|легкое|вакантное|незанятое|незамещенное|беспрепятственное|безвозбранное|невозбранное|привольное|раздольное|вольготное|просторное|широкое|независимое|пустое|праздное|властное|47:свободное время|досуг|время. Ant. рабочее время|
IndentationGuides=0
VLines=0
WrapVisualFlags=0
ScrollBars=2
Point(doSetSelStart)
Point(doSetSelLength)
Point(doEnsureVisible)
}

(помните искали совпадения в файлах)

Это совсем другое и не совсем правильно сделано, не буду здесь объяснять. + кто как понимает задачу.
карма: 6

0
Редактировалось 5 раз(а), последний 2020-10-13 17:14:46