Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2020-04-10 16:18:18 ЛС | профиль | цитата
Задача: дается список ссылок, есть в списке ссылки с поддоменами, нужно вырезать именно домен (это когда например сайт основной hiasm.com, его нужно выделить из forum.hiasm.com), может оканчиваться и на co.il и любые, это адрес главного сайта. Вопрос решил, я спрашивал, так и никто не ответил, вот решение
Add(MultiElementEx,6871373,546,259)
{
}
BEGIN_SDK
Add(EditMultiEx,6811382,21,21)
{
WorkCount=#59:doReplace=Удалить субдомен из ссылки, оставить только домен|
EventCount=#25:onEvent1=Результат, домен|
Width=986
Height=466
link(doReplace,13432187:doWork1,[(56,27)(56,41)])
}
Add(Str_Enum,14823284,392,112)
{
Delimiter="."
link(onEnum,12894658:doEvent1,[])
link(onEndEnum,1840434:doCompare,[(435,125)(435,181)])
link(String,7462058:Var2,[])
}
Add(CounterEx,7109243,483,119)
{
Point(doReset)
}
Add(StrList,11341552,595,112)
{
Point(EndIdx)
Point(onGetString)
Point(doGetString)
link(onGetString,5970074:doData,[])
}
Add(Hub,7395296,357,91)
{
OutCount=4
link(onEvent1,8228982:doData,[(385,97)(385,48)])
link(onEvent2,7109243:doReset,[(470,104)(470,132)])
link(onEvent3,11341552:doClear,[(572,111)(572,125)])
link(onEvent4,14823284:doEnum,[])
}
Add(Hub,12894658,441,112)
{
link(onEvent1,11341552:doAdd,[])
link(onEvent2,7109243:doNext,[])
}
Add(If_else,1840434,483,175)
{
Op2=Integer(2)
link(onTrue,14125867:doData,[])
link(onFalse,14916339:doOperation,[])
link(Op1,7109243:Count,[])
}
Add(EventFromData,8228982,392,42)
{
}
Add(DoData,14125867,532,175)
{
link(onEventData,7167788:doEvent3,[(758,181)(758,328)])
link(Data,11861143:Var2,[])
}
Add(GetDataEx,7462058,392,84)
{
link(Data,8228982:GetData,[])
}
Add(StrMask,16343016,182,35)
{
Mask="*.*"
link(onTrue,9510822:doEvent1,[])
}
Add(Math,14916339,616,182)
{
OpType=1
Op2=1
ResultType=0
link(onResult,8611915:doEvent1,[])
link(Op1,14559832:Var2,[])
}
Add(Hub,8611915,658,182)
{
link(onEvent1,11341552:doGetString,[(681,188)(681,159)(585,159)(585,146)])
link(onEvent2,11286967:doRead,[(684,195)(684,216)(597,216)(597,251)])
}
Add(ArrayRW,11286967,609,245)
{
link(onRead,1912082:doString,[])
link(Array,5445123:Var2,[])
link(Index,9238031:Var2,[])
}
Add(GetDataEx,14559832,616,161)
{
link(Data,11341552:EndIdx,[])
}
Add(FormatStr,1912082,686,245)
{
Mask="%1.%2"
link(onFString,2660277:doEvent1,[])
link(Str1,14503590:Var2,[])
}
Add(EventFromData,5970074,686,119)
{
}
Add(Hub,2660277,735,245)
{
link(onEvent1,1269374:doData,[])
link(onEvent2,1886402:doLength,[(759,258)(759,307)])
}
Add(EventFromData,1269374,770,245)
{
}
Add(Length,1886402,770,301)
{
link(onLength,7919030:doCompare,[])
}
Add(If_else,7919030,819,301)
{
Type=1
Op2=Integer(7)
link(onTrue,2070955:In,[])
link(onFalse,16680624:doData,[])
}
Add(DoData,16680624,903,308)
{
link(onEventData,7167788:doEvent1,[])
link(Data,11861143:Var3,[(909,89)])
}
Add(GetDataEx,11861143,532,84)
{
Angle=3
link(Data,7462058:Var3,[])
}
Add(Hub,7167788,952,308)
{
InCount=3
OutCount=1
link(onEvent1,6811382:onEvent1,[(986,314)(986,27)])
}
Add(FormatStr,5113210,735,399)
{
DataCount=3
Mask="%1.%2.%3"
link(onFString,7167788:doEvent2,[(942,405)(942,321)])
link(Str1,6651070:GetData,[])
link(Str2,14503590:Var3,[(748,208)])
link(Str3,11286967:Item,[(755,315)(615,315)])
}
Add(ArrayRW,13267957,651,350)
{
link(onRead,9656522:doEvent1,[])
link(Array,5445123:Var3,[(657,173)])
link(Index,9197342:Result,[(664,338)(622,338)(622,394)(587,394)])
}
Add(Math,9197342,581,350)
{
OpType=1
Op2=2
ResultType=0
link(onResult,13267957:doRead,[])
link(Op1,9238031:Var1,[(587,229)])
}
Add(EventFromData,6651070,735,350)
{
}
Add(GetDataEx,5445123,609,168)
{
link(Data,11341552:Array,[])
}
Add(GetDataEx,9238031,616,224)
{
Angle=1
link(Data,14559832:Var1,[(650,229)(650,166)])
}
Add(LineBreak,13113367,525,350)
{
link(Out,9197342:doOperation,[])
Primary=[2070955,336,-49]
}
Add(Hub,9656522,693,350)
{
link(onEvent1,6651070:doData,[])
link(onEvent2,5113210:doString,[(721,363)(721,405)])
}
Add(GetDataEx,14503590,686,203)
{
link(Data,5970074:GetData,[])
}
Add(MultiElement,13432187,133,35)
{
link(onEvent1,16343016:doCompare,[])
}
BEGIN_SDK
Add(EditMulti,15374381,21,21)
{
EventCount=1
WorkCount=1
Width=251
Height=109
link(doWork1,2709502:doEvent1,[(35,27)(35,76)])
}
Add(InlineCode,16227429,77,77)
{
@Hint=#45:Замена любых неотображаемых знаков на пробелы|
WorkPoints=#2:go|
EventPoints=#7:CurText|
DataPoints=#4:text|
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|18: text:THI_Event;|21: CurText:THI_Event;|3: |44: procedure go(var Data:TData; index:word);|3: |5: end;|0:|14:implementation|0:|25:procedure THiAsmClass.go;|3:var|11: S:String;|17: i, Len:Integer;|5:begin|28: S :=(ToStringEvent(text));|18: Len :=Length(S);|27: for i :=1 to Len do begin|35: if S[i] ‹ #32 then S[i] := ' ';|6: end;|23:_hi_OnEvent(CurText,S);|4:end;|4:end.|
link(CurText,11672152:doReplace,[])
link(text,13718162:GetData,[])
}
Add(Hub,2709502,49,70)
{
link(onEvent1,13718162:doData,[(70,76)(70,41)])
link(onEvent2,16227429:go,[])
}
Add(EventFromData,13718162,77,35)
{
}
Add(Replace,11672152,119,77)
{
SubStr=" "
link(onReplace,15374381:onEvent1,[(211,83)(211,27)])
}
END_SDK
Add(URLParser,7478251,259,42)
{
}
Add(Hub,9510822,231,42)
{
link(onEvent1,7478251:doParse,[])
link(onEvent2,7137299:doData,[(252,55)(252,97)])
}
Add(Replace,16083250,308,91)
{
SubStr="www."
link(onReplace,7395296:doEvent1,[])
}
Add(DoData,7137299,259,91)
{
link(onEventData,16083250:doReplace,[])
link(Data,7478251:Host,[])
}
END_SDK
В схеме есть компонент от NetSpirit URLParser
И в схеме используется компонент EventFromData опять не правильно, а мне так нравится его использовать, а Memory использую только когда нужно очищать данные

Редактировалось 1 раз(а), последний 2020-04-10 16:22:47
карма: 4

0
Ответов: 16884
Рейтинг: 1239
#2: 2020-04-10 19:12:01 ЛС | профиль | цитата
Дв-а-а-а. Карантин влияет на мозги не в лучшую сторону.



Редактировалось 1 раз(а), последний 2020-04-10 21:35:18
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 537
Рейтинг: 14
#3: 2020-04-11 01:33:33 ЛС | профиль | цитата
Мне по-их ваш карантин, так работаю дома, вчера первый раз вышел с маской в мир.
Схема, она зачем. Была задача придумать как из кучи списка ссылок добыть именно домены: это кто не знает , гласный сайт от корня сайта, это может быть forum.hiasm.com так и forum.hiasm.co.il так и tu.pak.forum.hiasm.com

Редактировалось 1 раз(а), последний 2020-04-11 01:38:29
карма: 4

0
Ответов: 16884
Рейтинг: 1239
#4: 2020-04-11 10:52:14 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-04-13 11:53:17
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 537
Рейтинг: 14
#5: 2020-04-13 01:18:27 ЛС | профиль | цитата
А практически вы пробовали, тянет на бред который никому не нежен

--- Добавлено в 2020-04-13 01:25:36

Вы сначала вникните в схему, а потом пишите такой бред. Если бы я так работал, то меня бы давно послали.

Редактировалось 1 раз(а), последний 2020-04-13 01:25:36
карма: 4

0
Ответов: 207
Рейтинг: 14
#6: 2020-04-13 11:22:36 ЛС | профиль | цитата
Sersey, Проверка на количество символов < 7 это не решение. Например домен "I.UA" http://i.ua поддомен http://job.i.ua/
И всю логику Вашей схемы, можно повторить одной, максимум двумя регулярками.

Редактировалось 1 раз(а), последний 2020-04-13 16:11:38
карма: 2

0
Ответов: 4630
Рейтинг: 749
#7: 2020-04-13 11:34:31 ЛС | профиль | цитата
Sersey писал(а):
это кто не знает , гласный сайт от корня сайта, это может быть forum.hiasm.com так и forum.hiasm.co.il так и tu.pak.forum.hiasm.com
Я не знаю где здесь "гласный от корня":
forum.hiasm.com
forum.hiasm.co.il
www.forum.hiasm.co.il

карма: 26

0
Ответов: 207
Рейтинг: 14
#8: 2020-04-13 11:43:59 ЛС | профиль | цитата
Netspirit писал(а):
Sersey писал(а):
это кто не знает , гласный сайт от корня сайта, это может быть forum.hiasm.com так и forum.hiasm.co.il так и tu.pak.forum.hiasm.com
Я не знаю где здесь "гласный от корня":

А может и такой быть
https://www.fosm-forum.figure-ground.photography/

Домен
figure-ground.photography


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

0
Ответов: 4630
Рейтинг: 749
#9: 2020-04-13 14:04:40 ЛС | профиль | цитата
И по каким критериям ты определил что домен "figure-ground.photography"? По крайней справа точке? Тогда по тому же правилу здесь "forum.hiasm.co.il" - это "co.il"?

Домен верхнего уровня
Доменное имя второго уровня

Общий домен верхнего уровня
Национальный домен верхнего уровня

Редактировалось 2 раз(а), последний 2020-04-13 14:14:50
карма: 26

0
Ответов: 207
Рейтинг: 14
#10: 2020-04-13 14:45:00 ЛС | профиль | цитата
Netspirit, Я про это и говорю, что здесь не все так просто. И определить такими методами не выйдет.
https://www.fosm-forum.figure-ground.photography/

Я так понял нужно вытащить "имя сайта". Естественно, что домен верхнего уровня сдесь .photography "имя сайта" figure-ground
или
forum.site.com.ua
сдесь уже нужно достать домен третьего уровня site
Как это сделать, я понятия не имею
карма: 2

0
Ответов: 4630
Рейтинг: 749
#11: 2020-04-13 15:34:20 ЛС | профиль | цитата
Joiner писал(а):
Как это сделать, я понятия не имею

Это уже другой разговор. А то "вы все ничего не понимаете, но мне помочь не хотите".
Ответ: обшарь всю документацию в поисках публичных доменов (доменов верхних уровней, включая национальные и дублированные TLD в национальных). Загоняешь их в большой список. Свои URL сравниваешь с элементами списка по окончанию. Если домен из URL оканчивается на домен из списка - отбрасываешь правую часть, всё что осталось слева - то что нужно.
Оставшийся результат может быть без точек, а может быть с точками. В любом случае "forum.hiasm.com" и "hiasm.com" - это РАЗНЫЕ домены, указывающие на разные, возможно не связанные, ресурсы. Исключением может быть "www.hiasm.com" и "hiasm.com", и то по принятому соглашению, но никто не обязывает.

Редактировалось 6 раз(а), последний 2020-04-13 16:07:39
карма: 26

0
Ответов: 207
Рейтинг: 14
#12: 2020-04-13 15:54:09 ЛС | профиль | цитата
Netspirit, Я не ТС, и мне это вообще не нужно.
карма: 2

0
Ответов: 4630
Рейтинг: 749
#13: 2020-04-13 16:03:51 ЛС | профиль | цитата
А, извиняюсь.
карма: 26

0
Ответов: 207
Рейтинг: 14
#14: 2020-04-14 00:34:36 ЛС | профиль | цитата
Sersey, Решение
Add(MainForm,4656706,56,105)
{
Width=612
Height=328
link(onCreate,2392330:doEnum,[])
}
Add(ArrayEnum,2392330,119,119)
{
link(onItem,10182813:doEvent1,[])
link(Array,7923312:Array,[])
}
Add(Memo,7923312,105,63)
{
Left=5
Top=5
Width=580
Height=130
Strings=#15:forum.hiasm.com|17:forum.hiasm.co.il|21:www.forum.hiasm.co.il|49:https://www.fosm-forum.figure-ground.photography/|16:http://job.i.ua/|22:tu.pak.forum.hiasm.com|26:https://www.форум.хиасм.рф|
ScrollBars=3
}
Add(Memo,14104238,642,350)
{
Left=5
Top=135
Width=580
Height=150
Font=[Arial,9,1,0,204]
ScrollBars=3
}
Add(StrList,5785915,476,119)
{
Strings=#7:academy|10:accountant|11:accountants|6:active|5:actor|5:adult|4:aero|6:agency|8:airforce|10:apartments|3:app|5:archi|4:army|3:art|4:asia|10:associates|8:attorney|7:auction|5:audio|5:autos|3:biz|3:cat|3:com|4:coop|5:dance|3:dev|3:edu|3:eus|8:feedback|3:gov|4:info|3:int|4:jobs|3:mil|4:mobi|3:moe|6:museum|4:name|3:net|5:ninja|3:one|3:ong|3:onl|6:online|3:ooo|3:org|7:organic|8:partners|5:parts|5:party|8:pharmacy|5:photo|11:photography|6:photos|6:physio|4:pics|8:pictures|4:pink|5:pizza|5:place|8:plumbing|4:plus|5:poker|4:porn|4:post|5:press|3:pro|11:productions|4:prof|10:properties|8:property|4:qpon|6:racing|7:recipes|3:red|5:rehab|3:ren|4:rent|7:rentals|6:repair|6:report|10:republican|4:rest|6:review|7:reviews|4:rich|4:site|3:tel|5:trade|6:travel|3:xxx|3:xyz|4:yoga|4:zone|2:ac|2:ad|2:ae|2:af|2:ag|2:ai|2:al|2:am|2:an|2:ao|2:aq|2:ar|2:as|2:at|2:au|2:aw|2:ax|2:az|2:ba|2:bb|2:bd|2:be|2:bf|2:bg|2:bh|2:bi|2:bj|2:bm|2:bn|2:bo|2:br|2:bs|2:bt|2:bv|2:bw|2:by|3:бел|2:bz|2:ca|2:cc|2:cd|2:cf|2:cg|2:ch|2:ci|2:ck|2:cl|2:cm|2:cn|2:co|2:cr|2:cu|2:cv|2:cx|2:cy|2:cz|2:dd|2:de|2:dj|2:dk|2:dm|2:do|2:dz|2:ec|2:ee|2:eg|2:er|2:es|2:et|2:eu|2:fi|2:fj|2:fk|2:fm|2:fo|2:fr|2:ga|2:gb|2:gd|2:ge|2:gf|2:gg|2:gh|2:gi|2:gl|2:gm|2:gn|2:gp|2:gq|2:gr|2:gs|2:gt|2:gu|2:gw|2:gy|2:hk|2:hm|2:hn|2:hr|2:ht|2:hu|2:id|2:ie|2:il|2:im|2:in|2:io|2:iq|2:ir|2:is|2:it|2:je|2:jm|2:jo|2:jp|2:ke|2:kg|2:kh|2:ki|2:km|2:kn|2:kp|2:kr|2:kd|2:kw|2:ky|2:kz|2:la|2:lb|2:lc|2:li|2:lk|2:lr|2:ls|2:lt|2:lu|2:lv|2:ly|2:ma|2:mc|2:md|2:me|2:mg|2:mh|2:mk|2:ml|2:mm|2:mn|3:мон|2:mo|2:mp|2:mq|2:mr|2:ms|2:mt|2:mu|2:mv|2:mw|2:mx|2:my|2:mz|2:na|2:nc|2:ne|2:nf|2:ng|2:ni|2:nl|2:no|2:np|2:nr|2:nu|2:nz|2:om|2:pa|2:pe|2:pf|2:pg|2:ph|2:pk|2:pl|2:pm|2:pn|2:pr|2:ps|2:pt|2:pw|2:py|2:qa|2:re|2:ro|2:rs|3:срб|2:ru|2:рф|2:rw|2:sa|2:sb|2:sc|2:sd|2:se|2:sg|2:sh|2:si|2:sj|2:sk|2:sl|2:sm|2:sn|2:so|2:sr|2:st|2:su|2:sv|2:sy|2:sz|2:tc|2:td|2:tf|2:tg|2:th|2:tj|2:tk|2:tl|2:tm|2:tn|2:to|2:tp|2:tr|2:tt|2:tv|2:tw|2:tz|2:ua|3:укр|2:ug|2:uk|2:us|2:uy|2:uz|2:va|2:vc|2:ve|2:vg|2:vi|2:vn|2:vu|2:wf|2:ws|2:ye|2:yt|2:yu|2:za|2:zm|2:zw|
}
Add(ArrayEnum,7018873,490,182)
{
link(onItem,9054691:doCompare,[(530,188)(530,241)(423,241)(423,300)])
link(Array,5785915:Array,[])
}
Add(If_else,9054691,448,294)
{
link(onTrue,6494022:doEvent1,[])
link(Op1,1987912:Part,[])
link(Op2,7018873:Item,[(461,275)(496,275)])
}
Add(Hub,10842796,315,182)
{
link(onEvent1,1987912:doEnum,[])
link(onEvent2,13034611:doExec,[(358,195)(358,356)])
}
Add(Str_Enum,1987912,441,182)
{
Delimiter="."
link(onEnum,7018873:doEnum,[])
}
Add(Hub,6494022,497,294)
{
link(onEvent1,10096427:doString,[])
link(onEvent2,1987912:doStop,[(521,307)(521,336)(391,336)(391,195)])
}
Add(RE_Search,13034611,553,350)
{
link(onMatch,14104238:doAdd,[])
link(Expression,10096427:FString,[])
}
Add(FormatStr,10096427,560,294)
{
Mask="([^\.]+)\.%1.*"
Point(FString)
}
Add(URLParser,9885253,266,119)
{
}
Add(Hub,10182813,196,119)
{
link(onEvent1,9885253:doParse,[])
link(onEvent2,16122349:doData,[(238,132)(238,188)])
}
Add(DoData,16122349,266,182)
{
link(onEventData,10842796:doEvent1,[])
link(Data,9885253:Host,[])
}


Редактировалось 1 раз(а), последний 2020-04-14 00:51:20
карма: 2

0
Ответов: 4630
Рейтинг: 749
#15: 2020-04-17 12:39:53 ЛС | профиль | цитата
Joiner, там ещё надо включения общих доменов в национальные, типа, "com.ua", "org.ua". При этом ещё непонятно во всех ли странах они являются общими доменами, или могут быть частными. А если ещё учитывать какие-то местные географические домены, типа "co.il".
Тем не менее, Sersey так и не объяснил по каким правилам он определяет нужную часть имени. А без этого и правильного решения не будет.
карма: 26

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