| View previous topic :: View next topic |
| Author |
Message |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Thu Feb 03, 2011 5:41 pm Post subject: Скрипт для кодинга |
|
|
Кто может написать скрипт вырезания лишних строк? Мне дана строка:
| Code: | | <vehicle id="vehicle (FBI Truck) (1)" paintjob="3" model="528" plate="8AX6XNH" interior="0" dimension="0" posX="130.36889648438" posY="1860.7575683594" posZ="17.936124801636" rotX="0" rotY="0" rotZ="90" upgrades="1096,1087,1008" /> |
А её надо превратить (попросту выдрать значения model, posX, posY, posZ, rotZ) в:
| Code: | | 528, 130.36889648438, 1860.7575683594, 17.936124801636, 90,0,0 |
Подскажите, как можно решить проблему, а то я в не-игровом скриптинге еще не шарю..
Причем это надо сделать в паре тысяч строк... |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Thu Feb 03, 2011 5:58 pm Post subject: |
|
|
Алгоритм-1 (простой):
Проходим по строкам в цикле; дальше действия для одной строки:
- разбиваем строку в массив, через символ кавычки (");
- берём только чётные значения (это всё, что находится внутри кавычек);
- проходим в цикле по полученному массиву и выбираем те значения, которые могут быть числовыми.
Алгоритм-2 (вытягиваем определённые значения):
Проходим по строкам в цикле; дальше действия для одной строки:
- первый подпункт из пред. варианта;
- берём в цикле нечётное, убираем (replace) из него символы < = и пробел, проверяем, содержится ли оно в заранее сформированном списке наименований (model, posX,...), если да, то берём его чётное (т.е. +1) значение массива.
P.S. Также можно взять за пример разбор ini-файлов или аргументов (из скриптов Infocatcher'а).
И в инете наверняка можно найти пример вытягивания данных их атрибутов XML. |
|
| Back to top |
|
 |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Thu Feb 03, 2011 6:15 pm Post subject: |
|
|
К сожалению, пока не понял...
Тем-более, с vb и js я в корнях не дружу.. Примерный код набросать сможешь? |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Thu Feb 03, 2011 6:54 pm Post subject: |
|
|
Блин, а я так домой хотел!..
Для одной строки написал:
test.js
| Code: | var structAttr =
{
model: 1,
posX: 1,
posY: 1,
rotX: 1,
rotY: 1,
rotZ: 1
};
var sXML = "";
var aRES;
// < цикл по строкам открывается
//получаем строку
sXML = '<vehicle id="vehicle (FBI Truck) (1)" paintjob="3" model="528" plate="8AX6XNH" interior="0" dimension="0" posX="130.36889648438" posY="1860.7575683594" posZ="17.936124801636" rotX="0" rotY="0" rotZ="90" upgrades="1096,1087,1008" />';
aRES = getAttributesValues(sXML);
if (aRES != null)
WScript.Echo(aRES.join(", ")); //решаем, куда результат выплёвывать
// цикл по строкам закрывается >
function getAttributesValues(sXML)
{
var aXML = sXML.split('"');
var sATTR = "";
var aRES = [];
var r = 0;
for (var n = 0; n <= aXML.length; n++)
{
sATTR = aXML[n].replace(/ /g, "");
sATTR = sATTR.replace(/=/g, "");
sATTR = sATTR.replace(/</g, "");
if (structAttr[sATTR] == 1)
{
aRES[r] = aXML[n + 1];
r += 1;
}
n += 1;
}
if (r > 0) return aRES
} |
к сожалению, как формировать structAttr динамически я не знаю а это очень бы пригодилось...
P.S. И ещё жаль, что ЭТА ШТУКА под AkelPad не пашет ((( |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Fri Feb 04, 2011 9:10 am Post subject: |
|
|
| Экспорт в Эксель из XML |
|
| Back to top |
|
 |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Fri Feb 04, 2011 11:31 am Post subject: |
|
|
| Один минус. Это не XML, а обычный текстовый документ. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Fri Feb 04, 2011 11:41 am Post subject: |
|
|
Infernal
Скрипт же уже набросал, в чём проблема? |
|
| Back to top |
|
 |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Fri Feb 04, 2011 11:44 am Post subject: |
|
|
VladSh
Ты набросал скрипт для заданной строки. Уже, вбитой, по идее)). А я пытаюсь массово и быстро Мне попросту не фкайф вбивать 1к строк вручную. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Fri Feb 04, 2011 1:35 pm Post subject: |
|
|
Ну ты, блин, даёшь!..
И что, вбивать по одной строке быстрее, чем сделать поиск по форуму?? Может лучше бы потратить это время и разобраться?
Копируем себе скрипт ProcessRowText.js.
Раскоменчиваем кусок внизу (убираем /* и */).
Создаём в той же дирректории новый js-файл, на основе того, что я вверху писал, допустим MySuperPuperMegaScript.js.
Удаляем функцию processString из ProcessRowText.js.
Несколько преобразований и получаем:
MySuperPuperMegaScript.js
| Code: | //задаём начальные тэги
var structAttr =
{
model: 1,
posX: 1,
posY: 1,
rotX: 1,
rotY: 1,
rotZ: 1
};
//подключаем ProcessRowText.js
eval(AkelPad.ReadFile(AkelPad.GetAkelDir(5) + "\\ProcessRowText.js"));
//берём весь текст
var pSelText = AkelPad.GetTextRange(0, -1);
//вызываем основную функцию обработчика всего файла
var arrResult = processRowText(pSelText);
AkelPad.SetSel(0, -1); //выделяем весь текст
AkelPad.ReplaceSel(arrResult.join("\r")); //заменяем на результат
//функция обработки отдельной строки
function processString(rowXML)
{
var pResult = "";
var aRES = getAttributesValues(rowXML);
if (aRES != null)
pResult = aRES.join(", ");
return pResult
}
//сюда вставить функцию getAttributesValues из моего прошлого скрипта этой темы |
Всё просто, как двери! |
|
| Back to top |
|
 |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Fri Feb 04, 2011 1:45 pm Post subject: |
|
|
| Имхо, просто не как двери)) На твоем скрипте он останавливает на 13 строчке (где команда eval), и почему-то требует точку_с_запятой (точнее говоря, ПРЕДПОЛОГАЕТСЯ ";"). Но в скрипте все проставлено, т.к я скопировал твой скрипт ну и пр. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Fri Feb 04, 2011 1:49 pm Post subject: |
|
|
| Quote: | | Один минус. Это не XML, а обычный текстовый документ. |
То, что ты привёл - это формат XML. Даже если там нету заголовков и корневого узла, добавить их - пять секунд.
| Code: | <?xml version="1.0" encoding="UTF-8"?>
<root>
<vehicle id="vehicle (FBI Truck) (1)" paintjob="3" model="528" plate="8AX6XNH" interior="0" dimension="0" posX="130.36889648438" posY="1860.7575683594" posZ="17.936124801636" rotX="0" rotY="0" rotZ="90" upgrades="1096,1087,1008" />
<vehicle id="vehicle (FBI Truck) (1)" paintjob="3" model="528" plate="8AX6XNH" interior="0" dimension="0" posX="130.36889648438" posY="1860.7575683594" posZ="17.936124801636" rotX="0" rotY="0" rotZ="90" upgrades="1096,1087,1008" />
<vehicle id="vehicle (FBI Truck) (1)" paintjob="3" model="528" plate="8AX6XNH" interior="0" dimension="0" posX="130.36889648438" posY="1860.7575683594" posZ="17.936124801636" rotX="0" rotY="0" rotZ="90" upgrades="1096,1087,1008" />
</root> |
|
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Fri Feb 04, 2011 1:51 pm Post subject: |
|
|
| Infernal wrote: | | ...На твоем скрипте он останавливает на 13 строчке (где команда eval)... |
P.S. Кстати, сейчас потестил с примером Fr0sT'а - всё работает.
Last edited by VladSh on Fri Feb 04, 2011 1:53 pm; edited 1 time in total |
|
| Back to top |
|
 |
Infernal
Joined: 03 Feb 2011 Posts: 7
|
Posted: Fri Feb 04, 2011 1:53 pm Post subject: |
|
|
вот наконец человек знающий появился))) спасиба)) дальше уже сам попробую разобраться))
Я тоже попробовал Fr0sT'овым примером - тоже работает. А твой фаил я скопировал по твоей инструкции, и ничего((
Главное осталось одно - удалить ненужные строки и все)
Тему можно закрывать. Frost'у отдельная благодарность. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2507 Location: Киев, Русь
|
Posted: Fri Feb 04, 2011 2:15 pm Post subject: |
|
|
Infernal
Ну ничего, так ничего, что ж тут поделаешь...
Коллеги,
вопрос по ходу: как можно массив
| Code: | | var arrAttr = ["model", "posX", "posY", "rotX", "rotY", "rotZ"]; | программно преобразовать в структуру такого вида:
| Code: | var structAttr =
{
model: 1,
posX: 1,
posY: 1,
rotX: 1,
rotY: 1,
rotZ: 1
}; | Есть ли какие-нибудь красивые способы (кроме eval'а)? |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1431
|
Posted: Fri Feb 04, 2011 2:39 pm Post subject: |
|
|
| VladSh wrote: | | Есть ли какие-нибудь красивые способы (кроме eval'а)? | Эээ... а eval тут каким боком поможет?
| Code: | var arrAttr = ["model", "posX", "posY", "rotX", "rotY", "rotZ"];
var structAttr = {};
for(var i = 0, l = arrAttr.length; i < l; i++)
structAttr[arrAttr[i]] = 1; |
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|