Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2011, 16:40   #1
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию [C#] Простой парсер

Доброго времени суток. Подскажите, как реализовать простой прасер.
Хочется создать что-то типо "сценарий", то есть например в файле set.txt такой текст
Код:
showmessage Спаун зомби
spawn 3, 49, 51 | Zombie
Если учесть тот фактор, что зарание неизвестно количество строк. Вот подскажите, как такое реализовать?
JonMagon вне форума Ответить с цитированием
Старый 24.12.2011, 16:52   #2
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Зависит от того, что вы хотите получить из этого файла. Думаю через регулярки и дальнейшую интерпретацию строк в команды (а это для простоты можно делать через рефлексию).
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 24.12.2011 в 16:55.
Lasur вне форума Ответить с цитированием
Старый 24.12.2011, 17:07   #3
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Ну, например в файле
Код:
message Привет
Программа находит в строке message и все что находится после пробела отображается в сообщение, т.е. в случае обнаружение message выполняется MessageBox.Show("Привет");
Вот как такое сделать?
JonMagon вне форума Ответить с цитированием
Старый 24.12.2011, 17:21   #4
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

Код:
int counter = 0;
string line;
System.IO.StreamReader file = 
    new System.IO.StreamReader(@"c:\test.txt");
while((line = file.ReadLine()) != null)
{
    if(line =~/message\s(.+)/) {
        System.Console.WriteLine($1)
    }
}

file.Close();
как-то так. я не знаком, как взять определённую подгруппу из регвыра, чтобы использовать в куске кода.
dixonich вне форума Ответить с цитированием
Старый 24.12.2011, 17:27   #5
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Ой, а можете для Win приложения написать, а то это для консоли. Зарание спасибо.
Цитата:
взять определённую подгруппу из регвыра
Не совсем понял.
JonMagon вне форума Ответить с цитированием
Старый 24.12.2011, 17:43   #6
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Код:
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace MyProj
{
	class Program
	{
		static void Main()
		{
			using (StreamReader sr = new StreamReader(@"D:\Command.txt"))
			{
				string s;
				while ((s = sr.ReadLine()) != null)
				{
					var strings = Regex.Split(s, @"\s+");
					if (strings[0] == "message") MessageBox.Show(strings[1]);
					Console.WriteLine(sr.ReadToEnd());
				}
			}
			Console.ReadLine();
		}
	}
}
Цитата:
Сообщение от JonMagon Посмотреть сообщение
Не совсем понял.
Регулярные выражения в C#
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.

Последний раз редактировалось Lasur; 24.12.2011 в 17:47.
Lasur вне форума Ответить с цитированием
Старый 24.12.2011, 17:53   #7
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

dixonich, попробовал ваш код итого 20 ошибок.
JonMagon вне форума Ответить с цитированием
Старый 24.12.2011, 18:00   #8
Lasur
Форумчанин
 
Аватар для Lasur
 
Регистрация: 13.10.2011
Сообщений: 143
По умолчанию

Цитата:
Сообщение от JonMagon Посмотреть сообщение
dixonich, попробовал ваш код итого 20 ошибок.
А вы не пробуйте чужой, а напишите свой.
Про регулярные выражения можно прочитать здесь, здесь и здесь.
Про то, как читать из файла, можно узнать у Шилдта.
Все имена, фамилии, ники, даты и события упоминаемые в моих постах, являются вымышленными. Все совпадения с реально существующими - случайны.
Lasur вне форума Ответить с цитированием
Старый 24.12.2011, 18:11   #9
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Эх, сейчас посмотрим, на PHP реализовать удалось, может и тут получится.
JonMagon вне форума Ответить с цитированием
Старый 24.12.2011, 22:35   #10
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

я и не говорил, что мой код будет работать и компилироваться, по-этому и написал "как-то так"
в перле бы это выглядело так
смысл понятен, думаю, а чтобы перевести с одного языка на другой - много ума не надо
open f, "$file";
while(<f>) {
/message\s(.+)/;
print $1;
}
dixonich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер cargo29 JavaScript, Ajax 2 15.09.2011 19:07
Парсер cargo29 PHP 15 11.08.2011 21:16
парсер shanluu PHP 3 31.05.2011 17:59
парсер на C# newerwiner C# (си шарп) 1 08.05.2011 16:16
Парсер Ronin333 Общие вопросы C/C++ 3 15.04.2010 14:00