1

Тема: AHK: Подсчитать количество повторений по условию (дубликаты)

Добрый день. Прошу помощи.
Имеется файл с повторяющимися  элементами нужно подсчитать количество повторений по условию (дубликаты).
1,2,3 и тд это место товара.

+ открыть спойлер

лето текст 1
лето 3 текст 3
лето те кс т 10
лето те 4 кст -
лето текст текст 7 нет
лето 2 текст 7 -
лето 4текст текст 7 1

зима текст 1
зима 3 текст 1
зима те кс т 10
зима те 4 кст -
зима текст текст 7 нет
зима 2 текст 7 7
зима 4текст текст 7 10

осень текст нет
осень 3 текст -
осень те кс т 10
осень те 4 кст -
осень текст текст 7 нет
осень 2 текст 7 2
осень 4текст текст 7 5

Файл порядка 10 тыс строк. Все строки начинаются с сезона. Заканчиваются числом от 1 до 10 или нет,  знаком -.
На выходе должно получиться.

+ открыть спойлер

1 место лето 2    зима 2    осень
2 место лето       зима       осень 1
3 место лето 1    зима       осень
4 место лето       зима       осень
5 место лето       зима       осень 1
6 место лето       зима       осень
7 место лето       зима 1    осень
8 место лето       зима       осень
9 место лето       зима       осень
10 место лето 1  зима 2    осень 1
- место лето 2     зима 1    осень 2
нет место лето 1 зима 1    осень 2

2

Re: AHK: Подсчитать количество повторений по условию (дубликаты)

text =
(
лето текст 1
лето 3 текст 3
лето те кс т 10
лето те 4 кст -
лето текст текст 7 нет
лето 2 текст 7 -
лето 4текст текст 7 1
зима текст 1
зима 3 текст 1
зима те кс т 10
зима те 4 кст -
зима текст текст 7 нет
зима 2 текст 7 7
зима 4текст текст 7 10
осень текст нет
осень 3 текст -
осень те кс т 10
осень те 4 кст -
осень текст текст 7 нет
осень 2 текст 7 2
осень 4текст текст 7 5
)

ObjList := {}	,	ListSeason := ""	,	OutputList := ""

loop,parse,% text,`n
	_tmp2 :=  (_tmp := StrSplit(A_LoopField," "))[_tmp.MaxIndex()] "_" _tmp[1]
	, ObjHasKey(ObjList,_tmp2) ? ++ObjList[_tmp2] : ObjList[_tmp2] := 1
	, !(ListSeason ~= "(^|`|)" _tmp[1] "($|`|)") and (ListSeason.=_tmp[1] "|")

ListSeason := Rtrim(ListSeason,"|")	

loop 12
{
	_tmp2 := ""
	Index := A_Index = 11 ? "-" : A_Index = 12 ? "нет" : A_Index
	
	loop,parse,% ListSeason,|
		% (!ObjHasKey(ObjList,_tmp := Index "_" A_LoopField) and (ObjList[_tmp] := ""))
		, _tmp2 .=  (_tmp2 ? "" : index ")`t")  A_LoopField " " ObjList[_tmp] "`t`t"
	
	OutputList .= (OutputList ? "`n" : "") _tmp2
}
msgbox % OutputList

3

Re: AHK: Подсчитать количество повторений по условию (дубликаты)

Огромное человеческое спасибо.