none
Получение информации с текстового файла. RRS feed

  • Вопрос

  • Есть текстовый файл input.vdf с определенным синтаксисом:

    "filters"
    {
    	"favorites"
    	{
    		"0"
    		{
    			"name"		"ServerName"
    			"address"	"127.0.0.1:27015"
    		}
    
    		"1"
    		{
    			"name"		"ServerName"
    			"address"	"127.0.0.1:27015"
    		}
    
    	}
    
    	"history"
    	{
    		"0"
    		{
    			"name"		"ServerName"
    			"address"	"127.0.0.1:27015"
    		}
    
    		"1"
    		{
    			"name"		"ServerName"
    			"address"	"127.0.0.1:27015"
    		}
    
    	}
    
    }
    Суть задачи такова, что мне нужно, чтобы скрипт брал информацию с ТОЛЬКО раздела favorites. И в каждом из его пунктов выбиралась строка address и ее содержимое передавалось в функцию addFavor(string). При условии что таких пунктов в favorites может быть до 32 штук. Помогите разобраться, так-как моих знаний явно не хватает на это. Может vdf-файл это особый формат и тут можно работать не через StreamReader и не считывать файл построчно? Заранее спасибо.


    2 сентября 2014 г. 6:37

Ответы

  • Добрый день.

    Перед вами стоит классическая задача разбора файла заданной структуры. Никто не мешает разбирать такой файл и при помощи StreamReader.

    Классически, задача решается следующим:

    1. Разбиваете файл на лексемы (неделимые элементы, в вашем случае это скобки и строки заключенные в кавычки)

    2. Пробегаете по списку лексем и найдя нужную, запускаете метод обработки данной лексемы. Например, найдя "favorites", вы запускаете метод, который пропускает открывающуюся скобку и запускает метод для разбора фаворитеса, причем запуск идет в цикле до закрывающейся скобки. Метод разбора фаворита из потока лексем считывает лексему с номером, лексему со скобкой, и все последующие лексемы до "address". Следующую лексему передает в метод addFavor. Ну и затем пропускает все лексемы до первой закрывающейся скобки.

    Нет, у вас есть еще вариант разобрать этот файл регулярными выражениями, но в вашем случае это будет как в одной бородатой шутке: «если у вас есть проблема, и вы собираетесь решать ее с использованием регулярных выражений, то у вас есть две проблемы».

    3 сентября 2014 г. 6:35
    Отвечающий