43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21

Парсер

18.12.2013, 14:11. Показов 3009. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для небольшой текстовой игрушки в жанре RPG нужен способ считывания данных из текстовых файлов.

Итак, что мне нужно:
Из любого места в коде я должен вызывать
получить(имя_файла, секция, параметр)
например - get_date(dwarfes, gnome, money)

В файлах, примерно, вот такой вид, параметров будет много:
[npc]
name = "Имя"
zombied = false
money = 1254

Функция должна определять секцию и искать параметр именно в ней, чтобы не рыскать по всему файлу. Парсер должен определять строки, булевы значения и числа и отсекая знак равенства и имя параметра получать непосредственно значение. Пожалуйста, помогите! Желательно примером.
P.S. Я новичок, самоучка.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2013, 14:11
Ответы с готовыми решениями:

Парсер на С
вопшем есть файл с текстом..... в етом файле есть какие даные(мусор)...и есть дни: Понедельник,Вторник,среда......с етого файла нада...

Парсер HTLM
Можно ли спарсить страницу что одни данные пошли в ComboBox (Имя пользователя) а ссылка (на пользователя) Была по клику? Добавлено...

Некий парсер
Допустим есть строка: 1 hour ago <span style="color: #72A326; text-shadow: 1px 1px 0px #4A7010; font-weight:...

38
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 09:26  [ТС]
Студворк — интернет-сервис помощи студентам
Kulgar, объем будет очень большим. В ини-файлах я буду хранить информацию о ГГ, NPC, предметах, мобах, объектах, локациях и пр.
Ну, и как бы часть информации за игровой сеанс может, вообще не понадобиться.
Например, игрок торговал, но не вступал в бой. Или вступал в бой, но при этом не пользовался ни одним из предметов.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 09:37
Цитата Сообщение от Max Warlock Посмотреть сообщение
Kulgar, объем будет очень большим. В ини-файлах я буду хранить информацию о ГГ, NPC, предметах, мобах, объектах, локациях и пр.
Ну, и как бы часть информации за игровой сеанс может, вообще не понадобиться.
Разумеется выход есть.
Оставляем только одну функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String get_data_str(String filename, String section, String param)
{
    filename = "data/cfg/" + filename + ".dat";
    if (FileExists(filename))
    {
        TIniFile *iniFile = new TIniFile(filename);
        String RetStr = iniFile->ReadString(section, param, "");
        delete iniFile;
        return RetStr;
    }
    else
    {
        ShowMessage("ERROR! File not found: database!");
    }
}
И в места вызова чтения чисел пишем преобразование возвращаемого значения в int:
C++
1
StrToInt(get_data_str(filename, section,param));
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.12.2013, 10:09
Цитата Сообщение от Kulgar Посмотреть сообщение
Разумеется выход есть.
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Да ладно. Все в стринг загнать.


А по хорошему конечно все это загоняется в шаблон.
1
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 10:11  [ТС]
SatanaXIII, я вроде сказал, что новичок. Смысл давать мне эту ссылку?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 10:12
Цитата Сообщение от Max Warlock Посмотреть сообщение
SatanaXIII, я вроде сказал, что новичок. Смысл давать мне эту ссылку?
Смысл в развии. Или у Вас цель - остаться новичком?
0
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 10:20  [ТС]
Kulgar, у меня цель развиваться постепенно, по возрастающим требованиям программы. А ссылка на Википедию мне в этом мало поможет.

Добавлено через 3 минуты
Вот, применил все ваши советы - пока всё работает так, как мне нужно.

Добавлено через 3 минуты
Ещё вопросик: как мне можно получить список всех секций в файле? Например, загрузить в ЛистБокс имена всех локаций из файла "locations"?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 10:21
Цитата Сообщение от Max Warlock Посмотреть сообщение
Kulgar, у меня цель развиваться постепенно, по возрастающим требованиям программы. А ссылка на Википедию мне в этом мало поможет.
Ссылка на Википедию - для общего представления, что и такое. Чтобы Вы знали в каком направлении Вам стоит двигаться в написании Вашей текущей программы. Гугл то у Вас никто не забирает. Получив общее представление можете дальше изучать вопрос.

Цитата Сообщение от Max Warlock Посмотреть сообщение
Вот, применил все ваши советы - пока всё работает так, как мне нужно.
Тут дело в концептуальных различиях: "работает как Вам нужно" и "работает праильно". Если Вы с самого начала будете стараться писать код "привально", то каждый последующий вопрос у Вас будет вызывать всё меньше затруднений и при этом самих вопросов будет меньше.
0
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 10:22  [ТС]
Kulgar, да-да, но моды я начинал писать под свои требования, разбираясь постепенно, и в результате стал неплохим модмейкером. Так что, путь у каждого свой)
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 11:44
Цитата Сообщение от Max Warlock Посмотреть сообщение
Ещё вопросик: как мне можно получить список всех секций в файле? Например, загрузить в ЛистБокс имена всех локаций из файла "locations"?
Можно. Есть такая функция:
C++
1
virtual void __fastcall ReadSections(Classes::TStrings* Strings);
C++
1
iniFile->ReadSections(Locations);
1
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 12:04  [ТС]
Kulgar, спасибо. Даже если у меня ничего и не выйдет, то я узнаю много нового, так как раньше работал только с листбоксами и таймерами, не считая всякой мелочи.
0
19.12.2013, 12:06

Не по теме:

Max Warlock, Вы пишите-пишите... я уже поиграть хочу. :)

0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.12.2013, 12:12
Max Warlock, у меня такое ощущение, что я сломал вам ноги, так как вот вам самый безудержный костыль за всю тему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <typeinfo>
char buf[1000]; // Глобальный буфер
 
template <class T>
void* GetData( String filename, String section, T param ) // Универсальная функция получения данных
{
TIniFile *iniFile = new TIniFile(filename);
 
if( ( (String)(typeid( param ).name()) ).Pos("int") ) // Это целочисленное значение?
  {
  int Ret_i =  iniFile->ReadInteger(filename, section, 0);
  delete iniFile;
  return (void*)Ret_i;
  }
else if( ( (String)(typeid( param ).name()) ).Pos("String") ) // Это String?
  {
  String Ret_Str = iniFile->ReadString(filename, section, "" );
  delete iniFile;
  strcpy( buf, Ret_Str.c_str() );
  return (void*)buf;
  }
else // Это черти что?
  {
  //ShowMessage( typeid( param ).name() );
  return NULL;
  }
}
Пример использования:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
ShowMessage( (int)GetData( "", "", i ) ); // Что передаем, то и достаем
 
String str;
ShowMessage( (char*)GetData( "", "", str ) ); 
}

P.S. Ах да, чуть не забыл: Ух-ха-ха-ха (гомерический хохот).


Цитата Сообщение от Max Warlock Посмотреть сообщение
Вот, применил все ваши советы
Загружайте лучше архив прямо на форум (4.12). Для пущей сохранности.
1
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 12:20  [ТС]
SatanaXIII, извините, вас не затруднит немного разбавить код комментариями? Так как он вселяет в меня ужас) Если кто-то из друзей спросит, как это работает, я и ответить не сумею прилично)))
0
19.12.2013, 12:21

Не по теме:

Цитата Сообщение от Max Warlock Посмотреть сообщение
я и ответить не сумею прилично)))
Отвечайте не прилично.

1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.12.2013, 12:22

Не по теме:

Цитата Сообщение от Max Warlock Посмотреть сообщение
Если кто-то из друзей спросит, как это работает, я и ответить не сумею прилично
Я тоже. :D



Добавлено через 21 секунду

Не по теме:

Цитата Сообщение от Kulgar Посмотреть сообщение
Отвечайте не прилично.
:rofl:

0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 12:30
Max Warlock, прежде чем что-либо объяснять Вам лучше бы ознакомиться со статьей Википедии.

Добавлено через 6 минут
Max Warlock, на закваску:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TMainForm::N4Click(TObject *Sender)
{
  //Çàãðóçêà èñõîäíûõ ïàðàìåòðîâ èãðîêà
  String str;int i;
  vleSvoystva->Values["Ïðîçâèùå"] = (char*)GetData("nickname", 0, str);
  vleSvoystva->Values["Óðîâåíü"] = (int)GetData("lvl", 0, i);
  vleSvoystva->Values["Ãðóïïèðîâêà"] = (char*)GetData("group", 0, str);
  AnsiString icon_name = (char*)GetData("group_icon", 0, str);
  if (FileExists(icon_name))
  {
    imgCommunity->Picture->LoadFromFile(icon_name);
  }
  else
  {
    ShowMessage("ERROR! File not found: image!");
  };
  lblMoney->Caption = random((int)GetData("money", 0, i));
}
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.12.2013, 12:38
Kulgar, да мы сейчас ему всю игру сбацаем.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
19.12.2013, 12:40
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Kulgar, да мы сейчас ему всю игру сбацаем.
Не знаю.. не знаю.. То шо я написал компилица, но не работает.
0
43 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 21
19.12.2013, 12:52  [ТС]
Kulgar, я почитаю обязательно, но дома.

Добавлено через 6 минут
Вот, залил. Работает клик по названию локации и одна кнопочка в левом верхнем углу.
Вложения
Тип файла: 7z S.T.A.L.K.E.R.7z (811.9 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2013, 12:52

Парсер выражений
Здравствуйте, помогите пожалуйста написать простой парсер, для дальнейшей самостоятельной доработки под нужды. Ссылки на гугл и прочее не...

Парсер сайтов
Доброго времени суток. У меня возник вопрос. Делаю парсер, вынимает из сайта то что мне надо это без вопросов... Но проблема в следующем,...

Парсер HTML
Здравствуйте! Нигде не могу найти парсера HTML на Си/С++, помогите кто чем может! На PHP все просто выходит в две строки, но надо...

Парсер IP пакета
Здравствуйте. Необходима помощь. Имеется программа которая с помощью функции pcap_loop разбивает файл xxx.pcap созданный в wireshark на...

Парсер boost/regex
Всем привет вот возникла сложно с boost/regex начну по порядку. Написав достаточное количество парсеров информации из интернета я понял...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru