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

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

MyDC.ru _ Kорзина _ Скрипт Сохраняющий Данные В Xml

Автор: Lpein 8.3.2009, 15:10

Нужен скрипт который сохранял данные: имя хаба, топик, описание, кол-во юзеров онлайн, общяя шара, пользователи на хабе онлайн (и рядом шара), админы онлайн, время работы хаба, и свои введённые в скрипт данные в XML файл. А также в отдельный файл чат, тоже в фотмате XML. Если всё из выше перечисленного невозможно, то хотябы что возможно). Какой от этого толк? Дело в том, что и веб формы, и отдельные проги умеют читать данные из XML формата. Это очень удобно, если тебе надо вывести куда нибуть инфу.

Автор: MEXAHuK 8.3.2009, 15:19

есть скрипт StatPx делает всё тоже самое. ищи

Автор: Lpein 8.3.2009, 15:28

Редактировать скрипт StatPx для меня - глупо. В lua я ноль. Мне нужен простой, без лишнеко кода скрипт, так что StatPx не неподходит.

Автор: MEXAHuK 8.3.2009, 15:53

учи Луа. так как в природе нет такого скрипта с таким функционалом. и без знания Луы не напишешь.

Автор: Lpein 8.3.2009, 16:09

Цитата(MEXAHuK @ 8.3.2009, 15:53) *
учи Луа. так как в природе нет такого скрипта с таким функционалом. и без знания Луы не напишешь.


Поэтому я и обратился за помощью в этот раздел.

Автор: MEXAHuK 9.3.2009, 7:58

поступай как я: ьери скрипт любой простой. и начни его чуток изменять под себя начиная с профилей. потом расширяй его функционал копируя функции из других скриптов.
все так начинали
есть поговорка: "Через задницу к звёздам". Удачи!

Автор: alex82 9.3.2009, 10:25

Lpein

Изобрази как это должно выглядеть.

Автор: Setuper 9.3.2009, 12:21

Полый синтаксис xml нужно предоставить.

Автор: Lpein 9.3.2009, 22:40

Цитата(Setuper @ 9.3.2009, 12:21) *
Полый синтаксис xml нужно предоставить.


Надесью правильно тебя понял.

CODE
<?xml version="1.0" encoding="UTF-8"?><hub>
<hub_name>имя хаба</hub_name>
<topik>топик</topik>
<description>описание</description>
<users>кол-во юзеров онлайн</users>
<shara>общяя шара</shara>
<admins_online>админы онлайн</admins_online>
<hub_online>время работы хаба</hub_online>
<info>своя инфа</info>
</hub>


Файл с чатом (выводится 9 последних строкс чата хаба):

CODE
<?xml version="1.0" encoding="UTF-8"?><chat>
<1>[21:29:10] <белый> кто живой</1>
<2>[21:29:11] <белый> кто живой</2>
<3>[21:29:12] <белый> кто живой</3>
<4>[21:29:13] <белый> кто живой</4>
<5>[21:29:14] <белый> кто живой</5>
<6>[21:29:15] <белый> кто живой</6>
<7>[21:29:16] <белый> кто живой</7>
<8>[21:29:17] <белый> кто живой</8>
<9>[21:29:18] <белый> кто живой</9>
</chat>


(это пример)

Автор: Setuper 9.3.2009, 22:52

нет, не правильно ты меня понял.

ты предоставил примеры, некоторые даже не xml. Данные примеры воплощают далеко не весь синтаксис xml. Или тебе полный xml не надо, а нужно только по эти примеры реализацию?

Автор: Lpein 9.3.2009, 23:46

Поправил. Теперь нормально?

Автор: Setuper 10.3.2009, 0:51

Код
<5>[21:29:14] <белый> кто живой</5>
Это не xml!
Где закрывающийся тэг для тэга <белый>?

Правильно будет так:
Код
<5>[21:29:14] <белый/> кто живой</5>

Или же так:
Код
<5>[21:29:14] <белый></белый> кто живой</5>

Или так:
Код
<5>[21:29:14] &lt;белый&gt; кто живой</5>


Либо тебе не совсем xml нужен, либо я не знаю что тебе нужно.

Автор: Lpein 10.3.2009, 1:26

тогда чат ненадо, хватит и первого xml`а

Автор: alex82 10.3.2009, 11:53

А для чего оно тебе, если не секрет?

Автор: Setuper 10.3.2009, 12:22

Функция для сохранения в один вариант xml файла:

Код
local function ST(t, f, c)
  for i, j in pairs(t) do
    if type(j)=="table" then
      f:write(string.rep("\t",c).."<"..tostring(i)..">\n")
      c=c+1
      ST(j, f, c)
      c=c-1
      f:write(string.rep("\t",c).."</"..tostring(i)..">\n")
    elseif tostring(j) and tostring(j)~="" then
      f:write(string.rep("\t",c).."<"..tostring(i)..">"..tostring(j).."</"..tostring(i)..">\n")
    end
  end
end

function SaveToXml(sFile, tTable, sStr)
  local h = io.open(sFile, "w")
  if h then
    if sStr and tostring(sStr) then
      h:write(string.format("%q", tostring(sStr)).."\n")
    else
      h:write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
    end
    ST(tTable, h, 0)
    h:flush()
    h:close()
    return true
  end
end


Использование:
Код
tTab = {
  hub = {
    hub_name = "имя хаба",
    topik = "топик",
    description = "описание",
    users = "кол-во юзеров онлайн",
    shara = "общяя шара",
    admins_online = "админы онлайн",
    hub_online = "время работы хаба",
    info = "своя инфа",
  }
}

SaveToXml("test.xml", tTab)

Автор: Nickolya 10.3.2009, 13:52

Мои маленькие наброски, может пригодиться, думаю надо обязательно включить в функцию замену < > " ' &

CODE
newrow = "\r\n"

string.g = function(sData, s1, s2)
return sData:gsub(s1, Return(s2))
end

tNeedGusbsForXml = {
["<"] = "<",
[">"] = ">",
["'"] = "&apos;",
["\""] = "&quot;",
}

function Save(tTable, sTableName)
local sData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"..newrow
sData = sData..SerializeToString(tTable, sTableName, sTab)
return sData
end

function Return(sData)
if type(sData) == "function" then
return sData
end
return function()
return sData
end
end

function NeedGusbsForXml(sData)
sData = tostring(sData) or ""
sData = sData:g("&", "&")
for w, t in pairs(tNeedGusbsForXml) do
sData = sData:g(w, t)
end
return sData
end

function SerializeToString(tTable, sTableName, sTab)
local sTab = sTab or ""
sTableName = NeedGusbsForXml(sTableName)
local sTmp = sTab.."<"..sTableName..">"..newrow
for key, value in pairs(tTable) do
local sKey = NeedGusbsForXml(key)
if type(value) == "table" then
sTmp = sTmp..SerializeToString(value, sKey, sTab.."\t")
else
local sValue = NeedGusbsForXml(value)
sTmp = sTmp..sTab.."\t<"..sKey..">"..sValue.."</"..sKey..">"..newrow
end
end
sTmp = sTmp..sTab.."</"..sTableName..">"..newrow
return sTmp
end

tTable = {
strings = {},
bools = {},
nums = {},
}
for i = 0, 34 do
tTable.strings[i] = SetMan.GetString(i) or ""
end
for i = 0, 113 do
tTable.nums[i] = SetMan.GetNumber(i)-- or ""
end
for i = 0, 55 do
tTable.bools[i] = SetMan.GetBool(i) or "false"
end

Core.SendToAll(Save(tTable, "HubConfig"))

Результат примерно такой:
CODE
<?xml version="1.0" encoding="UTF-8"?>
<HubConfig>
<nums>
<1>0</1>
<2>0</2>
<3>0</3>
<4>0</4>
<5>0</5>
<6>0</6>
<7>0</7>
<8>0</8>
<9>0</9>
<10>0</10>
<11>1</11>
<12>300</12>
<13>5</13>
<14>512</14>
<15>25</15>
<16>20</16>
<17>100</17>
<18>30</18>
<19>20</19>
<20>20</20>
<21>2</21>
<22>5</22>
<23>60</23>
<24>2</24>
<25>2</25>
<26>2</26>
<27>3</27>
<28>10</28>
<29>10</29>
<30>2</30>
<31>5</31>
<32>60</32>
<33>2</33>
<34>2</34>
<35>2</35>
<36>3</36>
<37>2</37>
<38>10</38>
<39>1</39>
<40>1</40>
<41>60</41>
<42>1</42>
<43>6</43>
<44>60</44>
<45>2</45>
<46>1</46>
<47>120</47>
<48>3</48>
<49>10</49>
<50>60</50>
<51>6</51>
<52>2</52>
<53>240</53>
<54>20</54>
<55>10</55>
<56>10</56>
<57>2</57>
<58>1</58>
<59>96</59>
<60>2</60>
<61>64</61>
<62>1</62>
<63>24</63>
<64>100</64>
<65>25</65>
<66>120</66>
<67>600</67>
<68>3</68>
<69>60</69>
<70>300</70>
<71>3</71>
<72>31</72>
<73>300</73>
<74>3</74>
<75>30</75>
<76>900</76>
<77>3</77>
<78>256</78>
<79>500</79>
<80>60</80>
<81>1</81>
<82>5000</82>
<83>600</83>
<84>0</84>
<85>250</85>
<86>60</86>
<87>1</87>
<88>2500</88>
<89>600</89>
<90>3</90>
<91>128</91>
<92>160</92>
<93>1000</93>
<94>60</94>
<95>1</95>
<96>10000</96>
<97>600</97>
<98>0</98>
<99>1024</99>
<100>4</100>
<101>128</101>
<102>60</102>
<103>5</103>
<104>256</104>
<105>300</105>
<106>5</106>
<107>10</107>
<108>5</108>
<109>10</109>
<110>5</110>
<111>60</111>
<112>5</112>
<113>10</113>
<0>250</0>
</nums>
<bools>
<1>true</1>
<2>false</2>
<3>false</3>
<4>false</4>
<5>false</5>
<6>false</6>
<7>false</7>
<8>false</8>
<9>false</9>
<10>false</10>
<11>true</11>
<12>false</12>
<13>false</13>
<14>false</14>
<15>false</15>
<16>false</16>
<17>false</17>
<18>true</18>
<19>false</19>
<20>false</20>
<21>false</21>
<22>true</22>
<23>true</23>
<24>false</24>
<25>true</25>
<26>true</26>
<27>true</27>
<28>true</28>
<29>true</29>
<30>false</30>
<31>true</31>
<32>false</32>
<33>false</33>
<34>false</34>
<35>false</35>
<36>false</36>
<37>true</37>
<38>false</38>
<39>false</39>
<40>true</40>
<41>true</41>
<42>false</42>
<43>true</43>
<44>false</44>
<45>true</45>
<46>true</46>
<47>true</47>
<48>true</48>
<49>true</49>
<50>true</50>
<51>true</51>
<52>true</52>
<53>true</53>
<54>false</54>
<55>false</55>
<0>false</0>
</bools>
<strings>
<1>Admin</1>
<2>192.168.0.10</2>
<3>1209;411</3>
<4>0</4>
<5><Enter hub description here></5>
<6></6>
<7>reg.hublist.org;serv.hubs-list.com;hublist.cz;hublist.dreamland-net.eu;allhublista.myip.hu;hubinfo.myip.hu;publichublist-nl.no-ip.org;reg.hublist.dk</7>
<8>Sorry, this hub is only for registered users.</8>
<9></9>
<10></10>
<11>Your share is outside the limits. Min share is %[min], max share is %[max].</11>
<12></12>
<13>Your slots count is outside the limits. Min slots limit is %[min], max slots limit is %[max].</13>
<14></14>
<15>Your hubs/slots ratio outside the limit. Maximum allowed ratio is %[hubs]/%[slots].</15>
<16></16>
<17>Your hubs count is higher than allowed %[hubs] hubs.</17>
<18></18>
<19>Your client don&apos;t send description tag, or your client is not supported here.</19>
<20></20>
<21>PtokaX</21>
<22></22>
<23></23>
<24>OpChat</24>
<25></25>
<26></26>
<27></27>
<28></28>
<29>!+-/*</29>
<30></30>
<31>Your nick length is outside the limit. Allowed min is %[min] and max %[max].</31>
<32></32>
<33></33>
<34>Russian</34>
<0>RDW</0>
</strings>
</HubConfig>


surrender.gif

Автор: alex82 10.3.2009, 14:09

А почему бы действительно не использовать StatPX?

Для примера приведу шаблон списка онлайн юзеров:

Код
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Online>
[ROW_BEGIN]    <User Nick="[NICK]" Share="[SHARE]" Client="[CLIENT]" Mode="[MODE]" Hubs="[HUBS]" Slots="[SLOTS]" />
[ROW_END]</Online>

Результат работы скрипта совместно с этим шаблоном примерно такой:
Код
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Online>
    <User Nick="alex82" Share="407.869 GB" Client="StrongDC++ 2.21" Mode="Актив" Hubs="4" Slots="2/0/2" />
    <User Nick="alexxx" Share="407.869 GB" Client="StrongDC++ 2.21" Mode="Актив" Hubs="4" Slots="2/0/2" />
    <User Nick="www" Share="407.869 GB" Client="StrongDC++ 2.21" Mode="Актив" Hubs="4" Slots="2/0/2" />
</Online>

Автор: Lpein 10.3.2009, 21:02

Всем спасибо за помощь, буду делать!

PS Кстати, StatPX действительно можно использовать. Сначала о нём мысли были другие, казалось, что там всё намного сложнее. Оказывается нет.

Автор: Setuper 12.3.2009, 0:46

Иногда стоит присмотреться и сложное окажется очень простым)))

Закрыто.