Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Kорзина _ Фильтр Тэгов

Автор: MEXAHuK 2.3.2009, 13:56

я както тут скачал замечательный скрипт AscIIArtBot и переписал его под собственные нужды.
теперь у меня такая трабла. те текстовые файлы что у меня есть содержат html тэги.
можете ли Вы привести пример кода который будет фильровать теги и заменять их на их текстовый аналог(<br> на знак новой строки и т.п.)??

Автор: Wariner 2.3.2009, 14:03

Код
msg = msg:gsub("<br>", "\n")

Автор: alex82 2.3.2009, 14:05

Код
HTML = {["&lt;br&gt;"] = "\n", ["<br />"] = "\n", ["<br>"] = "\n", ["&quot;"] = "\"", ["&lt;"] = "<", ["&gt;"] = ">"}
function ReplaceTags(data)
    for i in pairs(HTML) do
        data=string.gsub(data,i,HTML[i]);    
    end
    return data
end

Автор: MEXAHuK 2.3.2009, 15:06

спасибо)
как засунуть сюда?

Код
function ChatArrival(user,data)
    Core.GetUserAllData(user)
   data=string.sub(data,1,string.len(data)-1)
   if( string.sub(data, 1, 1) == "<" ) then
      s,e,cmd = string.find(data,"%b<>%s+(%S+)")
      cmd = string.sub(cmd, 2,string.len(cmd))
      if io.open(CDFolder.."/"..cmd..".txt",r) ~= nil then
         showtext(user, cmd)
         return true
      end
   end
end

function showtext(user, file)
local contents ="\r\n\r\n"
    for line in io.lines(CDFolder.."/"..file..".txt") do
        contents = contents..line.."\r\n"
    end
        --Core.SendToAll(user.sNick.."\r\n"..contents.."\r\n|")
        Core.SendPmToNick(user.sNick,Bot,contents)
end


текст который берётся не является html документом. просто текст с тэгами.

Автор: Wariner 2.3.2009, 15:36

почитай гденибудь что такое функции в языках! если не разберёшься то с программированием можно завязывать!


если вкратце то саму фукцию вставляем в любое место скрипта а вызов функции осуществляется по имени функции в твоём случае

Код
ReplaceTags(contents)


надеюсь место вставки сам додумаешь))))

+ эта функция никак не связанна с html она просто заменяет одни символы на другие(в твоём же случае html-теги)

Автор: MEXAHuK 2.3.2009, 17:06

спасибо Алекс82 и Маринеру! буду биться лбом об ваши ступни!

сделал так

Код
function showtext(user, file)
local contents ="\r\n\r\n"
    for line in io.lines(CDFolder.."/"..file..".txt") do
        contents = ReplaceTags(contents..line.."\r\n")
    end
        Core.SendPmToNick(user.sNick,Bot,contents)
end

тему можно закрыть

Автор: Wariner 2.3.2009, 17:38

Думаю оптимальнее будет так

Код
function showtext(user, file)
local contents ="\r\n\r\n"
    for line in io.lines(CDFolder.."/"..file..".txt") do
        contents = contents..line.."\r\n"
    end
    contents = ReplaceTags(contents)
    Core.SendPmToNick(user.sNick,Bot,contents)
end


+ мой ник по русски Воринер(ну можно и Варинер)....

Автор: Setuper 2.3.2009, 17:54

Оптимальнее не использовать цикл, а открыть файл и считать файл полностью:

Код
function showtext(user, file)
  local contents, f ="\r\n\r\n", io.open(CDFolder.."/"..file..".txt")
  if f then
    contents = contents..f:read('*a')
  end
  contents = ReplaceTags(contents)
  Core.SendPmToNick(user.sNick,Bot,contents)
end