Модуль:FetchData2: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 19: Рядок 19:


     -- Вилучаємо вміст таблиці wikitable
     -- Вилучаємо вміст таблиці wikitable
     local table_content = mw.ustring.match(content, "{|%s*class%s*=%s*\"wikitable\".-([|]-.-[|]})")
    -- Використовуємо нежадібний пошук (.-?) між {| і |}
     local table_content = mw.ustring.match(content, "{|%s*class%s*=%s*\"wikitable\".-([|].-.-[|]})")
     if not table_content then
     if not table_content then
         return nil
         return nil
Рядок 27: Рядок 28:
     local player_link_pattern = "%[?%[" .. escaped_player .. "%]%]?"
     local player_link_pattern = "%[?%[" .. escaped_player .. "%]%]?"


     -- 1. Знайти рядок, де гравець знаходиться у ДРУГІЙ колонці.
     -- 1. СТІЙКИЙ ПОШУК РЯДКА: Шукаємо гравця у ДРУГІЙ колонці
     -- У вашій розмітці:
     -- Шаблон:  
     -- \n| <№>
     -- 1. `[|]%s*.-` - Перша колонка (| 000)
    -- \n| [[<Гравець>]]
     -- 2. `[|]%s*` - Роздільник
    -- \n| <Дата>
     -- 3. `(.-)` - Друга колонка (захоплюємо вміст, який включає гравця)
    -- \n| <Провідник>
     -- 4. `[|]%s*.-[|]` - Захоплюємо решту колонок (3 і 4)
   
    -- Шаблон: \n| <№>\n| [[<Гравець>]]\n| <Дата>\n| <Провідник>
    -- Ми шукаємо:
    -- 1. \n| будь-які символи (№)
     -- 2. \n| + посилання на гравця
     -- 3. (.-) - захоплюємо решту даних у цьому рядку (Дата та Провідник)
     -- 4. \n|- або |} - до кінця рядка або таблиці
   
    local search_pattern =
        "([|]%s*.-%s*%s*[|]%s*" .. player_link_pattern .. "%s*[|].-)" -- Починаємо з першої колонки і захоплюємо до кінця рядка
      
      
    -- Шукаємо послідовність, що включає | <№> | [[Гравець]] |
    local search_pattern = "([|]%s*.-%s*[|]%s*" .. player_link_pattern .. "%s*[|].-)"
     local full_row_match = mw.ustring.match(table_content, search_pattern)
     local full_row_match = mw.ustring.match(table_content, search_pattern)


     if not full_row_match then
     if not full_row_match then
         -- Якщо не знайшли вільний рядок, шукаємо рядок, що починається з |-
         -- Додатковий пошук на випадок, якщо потрібен символ початку рядка |-\n
         search_pattern =  
         local row_start_pattern = "[|]%s*.-%s*[%-]%s*([|]%s*.-%s*[|]%s*" .. player_link_pattern .. "%s*[|].-)"
            "[|]%s*.-%s*[%-]%s*([|]%s*.-%s*[|]%s*" .. player_link_pattern .. "%s*[|].-)"
         full_row_match = mw.ustring.match(table_content, row_start_pattern)
         full_row_match = mw.ustring.match(table_content, search_pattern)
         if not full_row_match then
         if not full_row_match then
             return nil
             return nil
Рядок 59: Рядок 51:
      
      
     -- 2. Надійне розділення на комірки.
     -- 2. Надійне розділення на комірки.
     -- Ми використовуємо gmatch, щоб розділити весь захоплений блок на окремі комірки по |
     -- Розділяємо весь захоплений блок на окремі комірки по |
     for cell in mw.ustring.gmatch(full_row_match, "[|](.-)") do
     for cell in mw.ustring.gmatch(full_row_match, "[|](.-)") do
         local trimmed_cell = mw.text.trim(cell)
         local trimmed_cell = mw.text.trim(cell)
         -- Перевіряємо, чи це не заголовок і не порожній рядок
         -- Видаляємо службові елементи
         if trimmed_cell ~= "" and not mw.ustring.match(trimmed_cell, "^!") then
         if trimmed_cell ~= "" and not mw.ustring.match(trimmed_cell, "^!") then
             table.insert(columns, trimmed_cell)
             table.insert(columns, trimmed_cell)
Рядок 72: Рядок 64:


     if result then
     if result then
         -- 3. Очищення результату
         -- 3. Очищення результату: видалення зовнішніх [[ ]]
        -- Очищуємо від вікі-посилань (наприклад, [[Демон]] -> Демон)
         result = mw.text.trim(mw.ustring.gsub(result, "%[?%[?(.+)%]%]?", "%1"))
         result = mw.text.trim(mw.ustring.gsub(result, "%[?%[?(.+)%]%]?", "%1"))
         return result
         return result
Рядок 139: Рядок 130:
     end
     end


     -- Очищення від символів валют
     -- Очищення від символів валют та пробілів
     amount = mw.ustring.gsub(amount, "[^%d%s]", "")
     amount = mw.ustring.gsub(amount, "[^%d%s]", "")
     amount = mw.text.trim(amount)
     amount = mw.text.trim(amount)