Personally, I would use a regex:
(?<key>[a-zA-Z]+)(?<value>(\d*\.\d+)|(\d+))
Should do it.
[edit]Encoded HTML - damnit! - OriginalGriff[/edit]
Long update from OP
You could, but it's pretty horrible to maintain.
Did you know that you can get more than one Match from a regex?
Try this:
Regex regex = new Regex(@"(?<key>[a-zA-Z]+)(?<value>(\d*\.\d+)|(\d+))");
float x = 0.0F, y = x, z = x;
string[] lines = File.ReadAllLines(pathToFile);
foreach (string line in lines)
{
foreach (Match m in regex.Matches(line))
{
string key = m.Groups["key"].Value;
string val = m.Groups["value"].Value;
float f;
if (float.TryParse(val, out f))
{
switch (key)
{
case "X": x = f; break;
case "Y": y = f; break;
case "Z": z = f; break;
}
}
}
Console.Write("{0},{1},{2}", x, y, z);
}