Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace SimpleLex
{
class Lexical
{
//Сюда передается путь к файлу конфигурации
public string Path = "";
//Определяем ключевые слова
string regular = "Color|Size|Name";
public void lexical()
{
//Создаем массив строк для дальнейшего заполнения
string[] conf = new string[1024];
//Переменная счетчик
int i = 0;
//Заполняем массив из файла
//Path мы присваиваем значение при создании
//объекта нашего класса.
conf = File.ReadAllLines(Path);
//Запускаем цикл чтения
while (conf.Length - 1 >= i)
{
// Создаем новый объект класса Regex
// и передаем ему в качестве конструктора
// cписок ключевых слов
Regex RegularExp = new Regex(regular);
//Начинаем поиск совпадений в текущей строке
Match match = RegularExp.Match(conf[i]);
while (match.Success)
{
//Ожидаем наличия совпадений
break;
//Если нашли то выпрыгиваем
}
switch (match.Value) // Смотрим что же мы обнаружили и вызываем соответствующий метод
{
case "Color":
//вызываем метод Color_
//и передаем ему текущую строку для разбора
//Предварительно удалив все пробелы с двух сторон
//если они были метод Trim()
Color_(conf[i].Trim());
i++;
break;
case "Size":
size_(conf[i].Trim());
i++;
break;
default:
//все другое пропускаем
i++;
break;
}
}
}
void Color_(string str)
{
int i = 0;
while (str.Substring(i,1)!= "=")
{
//Ищем разделитель в данном случае "="
i++;
}
//Находим и извлекаем нужную нам информацию
string value_ = str.Substring(i + 1, str.Length - (i+1)).Trim();
//Теперь все зависит от вашей фантазии хотите
//Создайте класс который будет устанавливать цвет шрифта
//И.т.д
Console.WriteLine(value_);
Console.ReadKey();
}
void size_(string str)
{
/*
* В этом методе я хочу показать как быть если вы используете
* в своем файле для каждой команды разные разделители
* в теории конечно можно все это засунуть в один метод
* Но я советую в дальнейшем если вы будите применять
* именно такую структуру передавать в метод тип разделителя
* и соответственно искать именно его другое дело если вы имеете
* различный формат входных данных как у нас параметр size имеет
* вид shize X=100,Y=500
*/
//Есть прекрасный метод
int i = 0;
while (str.Substring(i,1) != " ")
{
i++;
}
str = str.Substring(i, str.Length - i).Trim();
string[] commandMas = new string[3];
commandMas = str.Split(',');
(GetPrivateProfileString? Не, не слышал)
Лютый песдеzz с сайта vbbook.ru
Аска, не звезди.
В Visual Studio есть xml schema для всех конфигов. Так что даже в xml-редакторе править такие конфиги вполне удобно: подсказки, автодополнение и пр.
Да, гуйня тоже есть для многих конфигов. Тыц-тыц мышкой - готово!
Но самое главное, - чаще всего вовсе не нужно заглядывать в эти конфиги и даже можно не подозревать об их существовании. Всё само генерируется в подалвющем большинстве случаев.
ЗЫ: я тоже обеими руками за более компактные форматы типа json/ini и вообще бинарные.
CSS горздо мощнее в смысле описательной силы, чем JSON, во многих ситуациях он может сэкономить место, когда есть повторяющиеся элементы, а так же описать зависимости между элементами напрямую не связаными друг с другом. Декларации можно парсить по одной а не ждать конца загрузки документа, есть комментарии, есть язык запросов.
Есть один недостаток - есть сколько-то очень специфических возможностей, которые применимы только в контексте ДОМа. Но все равно, он гораздо лучше JSONа.
1. Мне кажется, или букв стало существенно больше?
2. Что делать, если имена полей содержат пробелы (e.g.
"approx sales")?
3. Насколько просто понять, что закончился один документ и начался другой? Ведь порядок правил в css не фиксирован, их можно размещать в произвольном порядке.
Ну это частный случай. Если в JSON будут повторяющиеся элементы, у CSS есть все шансы выиграть по обьему.
А как в Прологе узнают, что програма закончилась? В ПаверЛум есть, например, специальное правило, которое управляет парсером, и инструктирует его сделать все выводы предшевстующие данному правилу, но можно и без него обойтись.
На счет имен полей - ну если бы CSS использовался бы не только в контексте DOM, то наверное этот момент исправили. В JSON есть тоже свои неприятности, например километровые строки, в которых нельзя делать переносы.
Опять же CSS именно, как конкретная реализация обладает недостатками, но в принципе, если эту идею доработать (а еще лучше, начать дорабатывать с Пролога и Ко), то возможностей и удобства поприбавилось бы.
Да, ну и по поводу объема еще, где-то потеряли, где-то приобрели. Используя пример выше, мы приобрели возможность написать запрос типа albums > name который вернет нам имена всех альбомов, для чего в JSON у нас нет инструмента, его нужно было бы писать.
Написать где? - в самом CSS, это выражение - валидный CSS.
> Имея монгу
А у меня есть конга, велосипед такой. При чем здесь это, это как-то меняет возможности формата JSON? Эта информация отсутствует в самом формате, чтобы ее от туда получить, нужно писать дополнительный код. Если его кто-то уже написал, то это не отменяет, а скорее подтверждает наличие такой необходимости.
Тащем-та, языков запросов для жсона существует уже несколько, выбирай. Проблема в том, что ни один пока не стандартизирован.
Языков схем для жсона тоже несколько уже сделано. Стандарта тоже пока нет.
И ваще, раз уж мы в теме о Шарпике, то генерация набора классов делается в два клика мышкой. Десериализация из json - одна строка кода. А дальше - линком его, линком! Самый офигительный язык запросов.
>Тащем-та, языков запросов для жсона существует уже несколько, выбирай. Проблема в том, что ни один пока не стандартизирован.
Какие? Не, ну я и на питоне могу сделать в одно списковое выражение, но вот есть у меня json viewer, там бы эта штука не помешала.
> Да и как вообще посчитать "описательную силу"
Посмотреть, что данные конкретной задачи удобно ложатся на используемый формат. Где меньше ёбли - тот и имеет большую "описательную силу" для данной задачи.
А в общем смысле - серебряной пули всяко нет.
P.S. > Поделить описательную работу на обписанное расстояние? Работу по описанию данных в нужном формате на расстояние до ближайшей либы 😉
> данные конкретной задачи удобно ложатся на используемый формат
> А в общем смысле - серебряной пули нет.
Нет-нет-нет, @wvxvw совсем недавно утвержал существование универсального формата непреодолимой выразительности, способного наилучшим образом представлять произвольные данные во всех случаях. Он просто ни с кем не делится своим открытием. Грусть.
Сравнивая описательную силу можно получить и частично упорядоченое множество, поэтому задавать вопрос "где больше выразительной силы" в общем случае не корректно. Может быть так, что язык А может выразить Б, но не может В, а язык Г может выразить В, но не может Б.
Например, JSON не может выразить is-a отношение. Т.е. описав два объекта, например: { а: 1 } и { а: 1, б: 2 } мы не знаем, является ли второй объект разновидностью первого, или это просто совпадение. CSS может это сделать, если одно и то же правило будет применятся к обоим объектам.
то же, что мешает записать код С++ в JSON - ничего, но это ничего и не изменит, т.как с точки зрения JSON ето по-прежнему будет просто строка, а не код на С++.
В CSS не хватает возможности записывать селекторы на правой стороне выражения, но все механизмы к этому уже есть, просто нужно разрешить это делать. И тогда можно будет структуру представляеть более наглядно, хотя это и не обязательно. Например, из правила:
a b { whatever }
мы можем вывести факт существования элемента a, и его вложеного элемента b. Просто типичные CSS не описывают структуру, потому что за них это уже кто-то сделал, но это не говорит о том, что это в принципе не возможно.
Точно таким же образом структуру описывает Пролог, или КИФ / ПаверЛум и т.п.
Смотря для чего... Если конфиг пишет прога - хмл или жсон однозначно лучше.
Но вот вручную править хмл и жсон довольно противно. Да и в жсоне комментов нет. И если не нужна иерархия больше одного-двух уровней - иниподобные форматы рулят.
мне почему-то на секундочку показалось, что ты невзаправду загрустил.
но сразу после этого мне и самому стало грустно, я даже всплакнул и налил себе водки.
It looks like lxml serializes attributes in the order you set them
As of lxml 3.3.3 (perhaps also in earlier versions) you can pass an OrderedDict of attributes to the lxml.etree.(Sub)Element constructor and the order will be preserved when using lxml.etree.tostring(root)
> это я делал через встроенный xml.etree
приехали
Втроенный не умеет, там только словарики принимаются, понятно, почему OrderedDict не работает. Юзай потоковый интерфейс, там уж наверняка порядок соблюдается. В жабе громоздко, но зато всё работает из коробки.
А в шарпе разве нет ничего, кхм, более высокоуровневого?
XML поди?
тут об этом рассказано 🙂
Вот в qt и boost, имхо, правильный подход. Единый интерфейс для конфигов в xml/ini/json. Кому что нравится - тот то и юзает. Код от этого не меняется.
В Visual Studio есть xml schema для всех конфигов. Так что даже в xml-редакторе править такие конфиги вполне удобно: подсказки, автодополнение и пр.
Да, гуйня тоже есть для многих конфигов. Тыц-тыц мышкой - готово!
Но самое главное, - чаще всего вовсе не нужно заглядывать в эти конфиги и даже можно не подозревать об их существовании. Всё само генерируется в подалвющем большинстве случаев.
ЗЫ: я тоже обеими руками за более компактные форматы типа json/ini и вообще бинарные.
Есть один недостаток - есть сколько-то очень специфических возможностей, которые применимы только в контексте ДОМа. Но все равно, он гораздо лучше JSONа.
Что мешает записать селектор (ключ) и набор его атрибутов (значения) в виде JSON?
Ну, что-нибудь такое, например.
2. Что делать, если имена полей содержат пробелы (e.g.
"approx sales")?
3. Насколько просто понять, что закончился один документ и начался другой? Ведь порядок правил в css не фиксирован, их можно размещать в произвольном порядке.
А как в Прологе узнают, что програма закончилась? В ПаверЛум есть, например, специальное правило, которое управляет парсером, и инструктирует его сделать все выводы предшевстующие данному правилу, но можно и без него обойтись.
На счет имен полей - ну если бы CSS использовался бы не только в контексте DOM, то наверное этот момент исправили. В JSON есть тоже свои неприятности, например километровые строки, в которых нельзя делать переносы.
Опять же CSS именно, как конкретная реализация обладает недостатками, но в принципе, если эту идею доработать (а еще лучше, начать дорабатывать с Пролога и Ко), то возможностей и удобства поприбавилось бы.
написать где? в тексте передаваемого документа? Или в базе данных элементов?
Имея монгу, я тоже могу написать что-то вроде Безусловно, это тривиально можно было бы выразить без js-методов, использую лишь json.
> Имея монгу
А у меня есть конга, велосипед такой. При чем здесь это, это как-то меняет возможности формата JSON? Эта информация отсутствует в самом формате, чтобы ее от туда получить, нужно писать дополнительный код. Если его кто-то уже написал, то это не отменяет, а скорее подтверждает наличие такой необходимости.
Языков схем для жсона тоже несколько уже сделано. Стандарта тоже пока нет.
И ваще, раз уж мы в теме о Шарпике, то генерация набора классов делается в два клика мышкой. Десериализация из json - одна строка кода. А дальше - линком его, линком! Самый офигительный язык запросов.
Какие? Не, ну я и на питоне могу сделать в одно списковое выражение, но вот есть у меня json viewer, там бы эта штука не помешала.
Видимо wvxvw хочет юзать формат представления непосредственно, а не городить ксс-овер-жсон и графы-овер-хмл. И логика в этом есть 😉
>а не городить ксс-овер-жсон
Сравниваются ортогональные вещи.
Да и как вообще посчитать "описательную силу". Поделить описательную работу на обписанное расстояние?
Посмотреть, что данные конкретной задачи удобно ложатся на используемый формат. Где меньше ёбли - тот и имеет большую "описательную силу" для данной задачи.
А в общем смысле - серебряной пули всяко нет.
P.S. > Поделить описательную работу на обписанное расстояние?
Работу по описанию данных в нужном формате на расстояние до ближайшей либы 😉
> А в общем смысле - серебряной пули нет.
Нет-нет-нет, @wvxvw совсем недавно утвержал существование универсального формата непреодолимой выразительности, способного наилучшим образом представлять произвольные данные во всех случаях. Он просто ни с кем не делится своим открытием. Грусть.
Например, JSON не может выразить is-a отношение. Т.е. описав два объекта, например: { а: 1 } и { а: 1, б: 2 } мы не знаем, является ли второй объект разновидностью первого, или это просто совпадение. CSS может это сделать, если одно и то же правило будет применятся к обоим объектам.
В CSS не хватает возможности записывать селекторы на правой стороне выражения, но все механизмы к этому уже есть, просто нужно разрешить это делать. И тогда можно будет структуру представляеть более наглядно, хотя это и не обязательно. Например, из правила:
a b { whatever }
мы можем вывести факт существования элемента a, и его вложеного элемента b. Просто типичные CSS не описывают структуру, потому что за них это уже кто-то сделал, но это не говорит о том, что это в принципе не возможно.
Точно таким же образом структуру описывает Пролог, или КИФ / ПаверЛум и т.п.
У быдлокодеров
Но вот вручную править хмл и жсон довольно противно. Да и в жсоне комментов нет. И если не нужна иерархия больше одного-двух уровней - иниподобные форматы рулят.
Вернись на форум.
что мешает их в нужном порядке вываливать?
но сразу после этого мне и самому стало грустно, я даже всплакнул и налил себе водки.
Ага. Я тоже. Потом расстегнул ватник, выпустил медведя погулять, почистил калашников и сел играть на балалайке.
Спасиб, но я так тоже умею, хуячить xml через printf. Нафига вообще нужен формат сериализации, библиотеками для которого проще не пользоваться?
It looks like lxml serializes attributes in the order you set them
As of lxml 3.3.3 (perhaps also in earlier versions) you can pass an OrderedDict of attributes to the lxml.etree.(Sub)Element constructor and the order will be preserved when using lxml.etree.tostring(root)
Сейчас поковырял свои сырцы конца 2012
приехали
Втроенный не умеет, там только словарики принимаются, понятно, почему OrderedDict не работает. Юзай потоковый интерфейс, там уж наверняка порядок соблюдается. В жабе громоздко, но зато всё работает из коробки.
Не работает же: http://ideone.com/6l6C6i
Это чтобы ГЦ не простаивал?
Regex с одним и тем же паттерном создаётся на каждой итерации цикла заново. То же греем ГЦ.
Сакральный смысл наличия этого цикла мною так и не понят.
О методе String.IndexOf аффтырь не слышал.
Это не сишарп, это вижуал си дот нет. Большая разница!