Суббота, 23 Ноября 2024, 07:05

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Чтение данных с Xml
berilДата: Четверг, 27 Марта 2014, 14:50 | Сообщение # 1
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
В столкнулся с такой проблемой. Сохранил записал значение transform.position в xml файл.
Атрибут с записанными данными выглядит так:
Код

PositionTran="(-2.4, 23.0, -4.3)"

Но вот столкнулся с проблемой, как потом их файла прочитать это значение и занести в переменную? Я конечно как настоящий программист обошел все костылями biggrin и просто записал координаты x, y, z по отдельности и потом их считывал. Но всетаки хочу работать как нужно и поэтому меня интересует как занести эти данные из атрибута в переменную.
ЯП C#

Ну и 2 вопрос: есть что то почитать или посмотреть о работе с ini файлами.
Буду благодарен за помощь




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
RvachДата: Четверг, 27 Марта 2014, 15:36 | Сообщение # 2
частый гость
Сейчас нет на сайте
Цитата beril ()
Но вот столкнулся с проблемой, как потом их файла прочитать это значение и занести в переменную?

Код
  
string str = "(-2.4, 23.0, -4.3)"; //например считали атрибут в str  
str=str.Replace("(","");
str=str.Replace(")","");
str=str.Replace(" ","");
string[] arr = str.Split(',');

А вообще надо бы это делать регулярками (regex), но так как я их <strike>очень слабо знаю</strike> не знаю пока так могу только такой топорный вариант предложить...


Мой блог: rvach.blogspot.com
berilДата: Четверг, 27 Марта 2014, 15:54 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
А как потом к float это все приравнять?



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
RvachДата: Четверг, 27 Марта 2014, 16:29 | Сообщение # 4
частый гость
Сейчас нет на сайте
Цитата beril ()
А как потом к float это все приравнять?

Код

     float x,y,z;
     x = Convert.ToSingle(arr[0]);
     y = Convert.ToSingle(arr[1]);
     z = Convert.ToSingle(arr[2]);


Добавлено (27.03.2014, 16:23)
---------------------------------------------
Но лучше вместо Convert использовать Parse, что бы не было неожиданных ошибок из-за неверного формата дробных чисел:
Код

     x= float.Parse(arr[0],CultureInfo.InvariantCulture.NumberFormat);
     y= float.Parse(arr[1],CultureInfo.InvariantCulture.NumberFormat);
     z= float.Parse(arr[2],CultureInfo.InvariantCulture.NumberFormat);


Добавлено (27.03.2014, 16:29)
---------------------------------------------
В итоге должно получиться как то так:

Код
using System;
using System.Text.RegularExpressions;
using System.Globalization;
...

     string input = "(-2.4, 23.0, -4.3)";

     Regex reg = new Regex(@"[( )]");
     string[] arr=reg.Replace(input, "").Split(',');

     float x,y,z;
        
     x= float.Parse(arr[0],CultureInfo.InvariantCulture.NumberFormat);
     y= float.Parse(arr[1],CultureInfo.InvariantCulture.NumberFormat);
     z= float.Parse(arr[2],CultureInfo.InvariantCulture.NumberFormat);


Мой блог: rvach.blogspot.com

Сообщение отредактировал Rvach - Четверг, 27 Марта 2014, 16:30
berilДата: Четверг, 27 Марта 2014, 18:13 | Сообщение # 5
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Спасибо

А насчет работы с ini файлами может кто, что то посоветовать?




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
Storm54Дата: Четверг, 27 Марта 2014, 22:09 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Неужели так трудно написать свой класс для работы с ini файлами.
Читаешь построчно. Смотришь, если строка в квадратных скобках, то вытаскиваешь из этой строки название секции(просто отбрасываешь квадратные скобки)
Читаешь дальше. Если находим строку, в которой есть знак равно, то делим эту строку на ключ и значение и сохраняем их в какой-нибудь
Код
Dictionary<string,Dictionary<string,object>>
(так же можно проверить, не обнесена ли эта строка квадратными скобками, т.к. это может быть идентификатор секции)
В общем придерживаясь этого способа перебираешь весь файл.
Кода минут на 5.

А вообще, думаю, что есть куча примеров готового класса для C#.
Ищется все это практически мгновенно. float.Parse тоже ищется за считанные секунды.


Сообщение отредактировал Storm54 - Четверг, 27 Марта 2014, 22:12
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг