2015-07-17 3 views
1

У меня есть кусок кода, который анализирует xml на переменные. По одной из переменных не будет больше 12, но может быть меньше. Я пытаюсь определить каждую из этих переменных несколько раз в секунду. Однако мне нужны только их определения, если они имеют переменную, потому что прямо сейчас, если имеется менее 12 переменных, программа вылетает из строя. Сейчас этот код ниже работает, но только в том случае, если в моем документе xml присутствует 12 значений. Как я могу повторить этот код, поэтому у меня нет списка операторов «if! = Null»?Haxe Итерация определяющих переменных

var _vol1 = (ipts[0].volume); 
var _vol2 = (ipts[1].volume); 
.... 
.... 
var _vol12 = (ipts[11].volume); 

Этот код работает при 12 значений в моем XML-документ, но падает, если есть меньше, чем 12, который иногда может быть.

Как структурировать код для определения/переопределения переменной только в том случае, если есть значение и не равно null? Это то, что нужно повторить?

If ((ipts[0].volume) != null){ 
    var _vol1 = (ipts[0].volume); 
} 

Я исследовал сайт Haxe, но не был уверен, где это применимо. Мой синтаксис и программирование не самые большие. Спасибо за помощь. Извините, если это плохой вопрос.

UPDATE: Вот мой полный код на данный момент. Он не откажет, но его не определяет переменный объем больше теперь, когда я добавил, если заявления

var xml = Xml.parse(_vMixData); 

// wrap the xml for fast access 
var data = new haxe.xml.Fast(xml.firstElement()); 

//Getting the data from inputs (here we are getting the xml node 'inputs', which contain two 'input' nodes, as per your sample xml file. 
var inputs = data.node.inputs; 
var ipts = new Array<VInput>(); 

for (input in inputs.nodes.input) { 
    var ipt = new VInput(); 
    if (input.has.state) { 
     ipt.state = input.att.state; 
     ipt.value = input.innerHTML; 
      } 
    if (input.has.volume) { 
     ipt.volume = Std.parseInt(input.att.volume); 
      } 
    if (input.has.muted) { 
     ipt.muted = Std.string(input.att.muted); 
      } 
    ipt.value = input.innerHTML;   
    ipts.push(ipt); 
} 

var overlays = data.node.overlays; 
var ovlys = new Array<VOverlay>(); 
for (overlay in overlays.nodes.overlay) { 
    var ovly = new VOverlay(); 
    if (overlay.has.number) { 
     ovly.number = Std.parseInt(overlay.att.number); 
    } 
    ovly.value = overlay.innerHTML; 
    ovlys.push(ovly); 
} 

//Defines variables based on returned information from vMix 
var _fadeToBlack:Bool = data.node.fadeToBlack.innerHTML == "True" ? true : false; 

var _version = data.node.version.innerHTML; 
var _record:Bool = data.node.recording.innerHTML == "True" ? true : false; 
var _external:Bool = data.node.external.innerHTML == "True" ? true : false; 
var _stream:Bool = data.node.streaming.innerHTML == "True" ? true : false; 
var _active:Int = Std.parseInt(data.node.active.innerHTML); 
var _preview:Int = Std.parseInt(data.node.preview.innerHTML); 

var _overlay1 = (ovlys[0].value); 
var _overlay2 = (ovlys[1].value); 
var _overlay3 = (ovlys[2].value); 
var _overlay4 = (ovlys[3].value); 
var _input1state = (ipts[0].state); 


if (ipts[0].volume != null){ 
var _vol1 = (ipts[0].volume); 
} 
if (ipts[1].volume != null){ 
var _vol2 = (ipts[1].volume); 
} 
if (ipts[2].volume != null){ 
var _vol3 = (ipts[2].volume); 
} 
if (ipts[3].volume != null){ 
var _vol4 = (ipts[3].volume); 
} 
if (ipts[4].volume != null){ 
var _vol5 = (ipts[4].volume); 
} 
if (ipts[5].volume != null){ 
var _vol6 = (ipts[5].volume); 
} 
if (ipts[6].volume != null){ 
var _vol7 = (ipts[6].volume); 
} 
if (ipts[7].volume != null){ 
var _vol8 = (ipts[7].volume); 
} 
if (ipts[8].volume != null){ 
var _vol9 = (ipts[8].volume); 
} 
if (ipts[9].volume != null){ 
var _vol10 = (ipts[9].volume); 
} 
if (ipts[10].volume != null){ 
var _vol11 = (ipts[10].volume); 
} 
if (ipts[11].volume != null){ 
var _vol12 = (ipts[11].volume); 
} 

//var _1mute = (ipts[0].muted); 
//var _2mute = (ipts[1].muted); 
//var _3mute = (ipts[2].muted); 
//var _4mute = (ipts[3].muted); 
//var _5mute = (ipts[4].muted); 
//var _6mute = (ipts[5].muted); 
//var _7mute = (ipts[6].muted); 
//var _8mute = (ipts[7].muted); 
//var _9mute = (ipts[8].muted); 
//var _10mute = (ipts[9].muted); 
//var _11mute = (ipts[10].muted); 
//var _12mute = (ipts[11].muted); 



if (ipts[2] != null){ 
    var _ovly3 = 1; 
} 
//trace(ovlys[2].value); 
//trace(ovlys[0].value); 
//trace(ipts[0].state); 
//trace(_active); 
//trace(_preview); 
//trace(_fadeToBlack); 

ответ

1

смотреть на каждой вещи в XML, вы делаете for (child in xml). Чтобы иметь любое количество переменных, вам нужно использовать массив, а не var1 через varInfinity.

Вы не отправлял достаточно кода, так что я предполагаю здесь:

var varArray = []; 
for (child in xml) { 
    varArray.push(child.volume); 
} 

Таким образом, это не имеет значения, сколько у вас есть переменные, код адаптирует (а не вы адаптации путем добавления var1, var2 и т. д.).

+0

Вот полный код, который у меня есть сейчас. Я определил их в этой нормальной структуре, но я связываю их с другой глобальной переменной, поэтому мне нужно переопределить их как переменную, которая попадает в другую программу. –

+0

Не совсем уверен, что вы имеете в виду, но вы не можете вставить их все в массив и передать массив другой программе? – MSGhero

+0

Я компилирую этот код в программе под названием Stencyl. У него есть блоки для кода Haxe, встроенного в его интерфейс. –

Смежные вопросы