C # Разбор текста - PullRequest
       2

C # Разбор текста

3 голосов
/ 21 августа 2010

Я попытался найти ответ, но не нашел правильного способа анализа этого фрагмента текста:

<Hotspot X="-8892.787" Y="-121.9584" Z="82.04719" />
<Hotspot X="-8770.094" Y="-109.5561" Z="84.59527" />
<Hotspot X="-8755.385" Y="-175.0732" Z="85.12362" />
<Hotspot X="-8701.564" Y="-114.794" Z="89.48868" />
<Hotspot X="-8667.162" Y="-122.9766" Z="91.87251" />
<Hotspot X="-8802.135" Y="-111.0008" Z="82.53865" />  

Я хочу вывести каждую строку в:

Ex. X="-8892.787" Y="-121.9584" etc...

Ответы [ 3 ]

9 голосов
/ 21 августа 2010

Если вы, возможно, можете трактовать это как XML, это было бы намного лучше, поэтому рассмотрим его как:

<Hotspots>
  <Hotspot X="-8892.787" Y="-121.9584" Z="82.04719" />
  <Hotspot X="-8770.094" Y="-109.5561" Z="84.59527" />
  <Hotspot X="-8755.385" Y="-175.0732" Z="85.12362" />
  <Hotspot X="-8701.564" Y="-114.794" Z="89.48868" />
  <Hotspot X="-8667.162" Y="-122.9766" Z="91.87251" />
  <Hotspot X="-8802.135" Y="-111.0008" Z="82.53865" />  
</Hotspots>

И загружаем его в XmlDocument, затем анализируем его следующим образом:

var xml = "<Hotspots><Hotspot X=\"-8892.787\" Y=\"-121.9584\" Z=\"82.04719\" /></Hotspots>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

foreach (XmlNode item in doc.SelectNodes("/Hotspots/Hotspot"))
{
    Console.Write(item.Attributes["X"].Value);
    Console.Write(item.Attributes["Y"].Value);
    Console.Write(item.Attributes["Z"].Value);

    // And to get the ouput you're after:
    Console.Write("X=\"{0}\" Y=\"{1}\" Z=\"{2}\"", 
                  item.Attributes["X"].Value, 
                  item.Attributes["Y"].Value, 
                  item.Attributes["Z"].Value);
}

Примечание: я использовал сокращенный пример в var xml = "...", чтобы сделать его немного более читабельным

4 голосов
/ 21 августа 2010

Полагаю, вы не слишком осведомлены о своих навыках разработки, но это не просто текст, это xml, и вы легко получите к нему доступ с помощью Linq To XML следующим образом:

XDocument myXDoc = XDocument.Parse(string.Format("<?xml version=\"1.0\" encoding=\"utf-8\"?><root>{0}<root>", yourXmlString));
foreach (XElement hotspot in myXDoc.Root.Elements())
{
    Console.WriteLine(string.Format("X=\"{0}\" Y=\"{1}\"", hotspot.Attribute("X").Value, hotspot.Attribute("Y").Value));
}

Я бы прочитал XML и Linq To XML по адресу:

http://msdn.microsoft.com/en-us/library/aa286548.aspx

http://msdn.microsoft.com/en-us/library/bb387098.aspx

0 голосов
/ 21 августа 2010

Предполагается, что каждая строка начинается с <Hotspot ...

//Lines are read into (for this example) a string[] called lines
List<string> valueLines = new List<string>();

foreach(string l in lines)
{
  string x;
  string y;
  string z;

  int xStart = l.IndexOf("X");
  int yStart = l.IndexOf("Y");
  int zStart = l.IndexOf("Z");
  int closeTag = l.IndexOf(@"/");

  StringBuilder vlBuilder = new StringBuilder();

  vlBuilder.Append(l.Substring(xStart, (yStart - xStart - 1));
  vlBuilder.Append(l.Substring(yStart, (zStart - yStart - 1));
  vlBuilder.Append(l.Substring(zStart, (closeTag - zStart - 1));

  valueLines.Add(vlBuilder.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...