it works but i can’t help but thinking a real programmer would write this in a few lines…
so what it does is compare every current element to next inline. it has to join elements if they are UpperCase followed by LowerCase and if two digits follow up…
i need to translate stuff like NaAlSi3O3 to Na,AL,SI,3,O,3 or C8H15O2 to C,8,H,15,O,2
var formula : String;
var atomList =new Array();
function Start ()
{
var i=0;
while (i<formula.Length-1)
{
print(i);
print(formula.Length);
if(i==formula.Length-2 System.Char.IsDigit(formula[i]) System.Char.IsLetter(formula[i+1]))
{
var amount=parseInt(formula[i].ToString());
atomList.Add(amount);
var name=formula[i+1].ToString();
atomList.Add(name);
}
else if(i==formula.Length-2 System.Char.IsLetter(formula[i]) System.Char.IsDigit(formula[i+1]))
{
name=formula[i].ToString();
atomList.Add(name);
amount=parseInt(formula[i+1].ToString());
atomList.Add(amount);
}
else if(i==formula.Length-2 System.Char.IsUpper(formula[i]) System.Char.IsUpper(formula[i+1]))
{
name=formula[i].ToString();
atomList.Add(name);
name=formula[i+1].ToString();
atomList.Add(name);
}
else if(i==formula.Length-2 System.Char.IsUpper(formula[i]) System.Char.IsLower(formula[i+1]))
{
name=formula[i].ToString()+formula[i+1].ToString();
atomList.Add(name);
}
else if(i==formula.Length-2 System.Char.IsLower(formula[i]))
{
name=formula[i].ToString();
}
else if(System.Char.IsUpper(formula[i]) System.Char.IsLower (formula[i+1]))
{
name=formula[i].ToString()+""+formula[i+1].ToString();
atomList.Add(name);
}
else if(System.Char.IsUpper(formula[i]) System.Char.IsUpper(formula[i+1]))
{
name=formula[i].ToString();
atomList.Add(name);
}
else if(System.Char.IsUpper(formula[i]) System.Char.IsDigit(formula[i+1]))
{
name=formula[i].ToString();
atomList.Add(name);
}
else if(System.Char.IsLower(formula[i]) System.Char.IsUpper(formula[i+1]) || System.Char.IsLower(formula[i]) System.Char.IsDigit(formula[i+1]))
{
name=formula[i].ToString();
}
else if(System.Char.IsDigit(formula[i]) System.Char.IsDigit(formula[i+1]))
{
amount=parseInt(formula[i].ToString()+formula[i+1].ToString());
atomList.Add(amount);
}
else if(System.Char.IsDigit(formula[i]) System.Char.IsUpper(formula[i+1]) !System.Char.IsDigit(formula[i-1]))
{
amount=parseInt(formula[i].ToString());
atomList.Add(amount);
}
else if(System.Char.IsDigit (formula[i]) System.Char.IsDigit(formula[i-1]))
{
amount=parseInt(formula[i].ToString()+formula[i-1].ToString());
}
i++;
}
print(atomList);
}