как правильно сделать сортировку текста

W1ll04eison

Участник
Автор темы
328
19
Версия MoonLoader
.026-beta
У меня есть текстовый файл, в который идет запись, запись ответов и пойманных PayDay.
Чуть ниже, в коде, который я прикреплю, идет чтение и счет этих строк, т.е файл читается построчно.

[19.01.2022|22:00:04] PayDay
[19.01.2022|22:00:59] <-Nick_Name[204] to Nick_Name[59]: 12

Подскажите, как правильно сделать, так что-бы в imgui.text выводились все даты(на данный момент, как у меня есть в коде, почему-то выводятся не все даты) и соответственно кол-во ответов за эту дату и пойманных PayDay.
Если же как-то можно, то, как сделать сортировку по датам так, что-бы та дата которая сегодня(к примеру 19.01.2022) была в самом верху.
т.е есть даты с 10.12.2021 по сегодняшний день, то, как сделать так, что-бы все эти даты выводились вот так:
сегодняшняя дата(19.01.2022) | Ответы: | PayDay: |Зарплата:
18.01.2022 | Ответы: | PayDay: |Зарплата:
17.01.2022 | Ответы: | PayDay: |Зарплата:
16.01.2022 | Ответы: | PayDay: |Зарплата:
...
10.12.2021 | Ответы: | PayDay: |Зарплата:
что-бы та дата которая сегодня была в самом верху.

собственно сам код:
Lua:
local file = io.open('moonloader\\config\\srt\\pm.ini', "r")
            local data, dataText, payday, strData, aHour, aOtvet = {}, {}, {}, "", 0, 0
            local min_data, max_data = 1000000000000, 0
            if file ~= nil then
                for line in file:lines() do
                    if string.find(line, "%[(.+)|.+%] PayDay") then
                        local S1 = string.match(line, "%[(.+)|.+%] PayDay")
                        local datanumber = convertDataToString(S1)
     
                        if min_data > datanumber then
                            min_data = datanumber
                        end
                        if max_data < datanumber then
                            max_data = datanumber
                        end
     
                        if data[datanumber] == nil then
                            data[datanumber] = { payday = 0, otvet = 0, data = S1 }
                        end
                        data[datanumber]["payday"] = data[datanumber]["payday"] + 1
                        aHour = aHour + 1
                    end
                    if string.find(line, "%[(.+)|.+%] .."..config.tag.SupportName.."%[%d+%] to .+%[%d+%]: .+") then
                        local S1, S2 = string.match(line, "%[(.+)|.+%] ..("..config.tag.SupportName.."%[%d+%] to .+%[%d+%]: .+)")
                        local datanumber = convertDataToString(S1)
     
                        if min_data > datanumber then
                            min_data = datanumber
                        end
                        if max_data < datanumber then
                            max_data = datanumber
                        end
     
                        if data[datanumber] == nil then
                            data[datanumber] = { payday = 0, otvet = 0, data = S1 }
                        end
                        data[datanumber]["otvet"] = data[datanumber]["otvet"] + 1
                        aOtvet = aOtvet + 1
                    end
                end
            end
            io.close(file)
            DiText = ""
            for i = min_data, max_data do
                if data[i] ~= nil then
                    v = data[i]
                    DiText = string.format("%sДата: %s | Ответы: %s | PayDay: %s | Зарплата: %s\n", DiText, v["data"], v["otvet"], v.payday, (v.payday * 30000))
                end
            end
            DiText3 = '' .. DiText
            DiText2 = 'Всего:\t Ответы: '..aOtvet..'\t PayDay: '..aHour..'\t Зарплата: '..(aHour * 30000)
     
                Dtext = ""
            imgui.BeginChild("", imgui.ImVec2(434, 150), true)
            imgui.Text(u8(DiText3))
            imgui.EndChild()
            imgui.Text(u8(DiText2))
            if imgui.Button(u8'Очистить счетчик') then
                local f = io.open('moonloader\\config\\srt\\pm.ini', 'w')
                f:write("")
                f:close()
                sampAddChatMessage(tag.. '{FFFFFF} Счетчик ответов успешно {FF0000}сброшен.', 0xFFFF00)

            end

            imgui.End()
 
Последнее редактирование: