PDA

Просмотр полной версии : [Помогите!] C# обьясните как парсировать??


Deep45
25.03.2011, 19:19
люди!
я уже пол гугла облазил!!!
мне нужно из переменной html вытащить данные
с
"hash: ' "
по
" ', cats:"

обьясните пожалуйста!!
а то, на этом встало всё движение =(

Hermein
06.04.2011, 21:32
люди!
я уже пол гугла облазил!!!
мне нужно из переменной html вытащить данные
с
"hash: ' "
по
" ', cats:"

обьясните пожалуйста!!
а то, на этом встало всё движение =(

Смотри ты отправил Post/Get запрос, принял Responce в твоем случае это html-вид
далее делаем простое действие:

string[] s = html.Split();
for (int i = 0; i < s.Length; i++)
{int nachalo = s[i].IndexOf("hash:");
int konets = s[i].IndexOf("cats:");
string rezult = s[i].Substring(nachalo, konets);
MessageBox.Show(rezult);
}
Вот и все в принципе, подправь как тебе надо и все.

Deep45
06.04.2011, 21:44
не получается.
вот кусок кода
CookieContainer cc = new CookieContainer();
cc.Add(cook);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] post = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
post.UserAgent = "Opera/9.80";
post.CookieContainer = cc;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])post.GetResponse();
string html = new StreamReader(response.GetResponseStream(),
Encoding.UTF8).ReadToEnd();
string[] s = html.Split();
for (int i = 0; i < s.Length; i++)
{
int nachalo = s[i].IndexOf("hash: '");
int konets = s[i].IndexOf("', cats");
string rezult = s[i].Substring(nachalo, konets);
MessageBox.Show(rezult);
}
говорит что у переменной nachalo не может быть колличество меньше нуля. и прога виснит:sceptic:

Добавлено через 3 минуты
box.removeButtons().addButton('Отмена', box.hide, 'no');
cur.addFriend = function() {
ajax.post('al_friends.php', {act: 'add', mid: 1, hash: '353aa443eb13266192', cats: ge('friend_add_cats').value, message: ge('add_msg_text').value}, {onDone: function(text) {
box.content(text);
box.removeButtons().addButton('Закрыть');
setTimeout(function() {
вот то что в ответ приходит (это часть)

Hermein
06.04.2011, 21:51
не получается.
вот кусок кода
CookieContainer cc = new CookieContainer();
cc.Add(cook);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] post = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])WebRequest.Create("[Ссылки могут видеть только зарегистрированные и активированные пользователи]");
post.UserAgent = "Opera/9.80";
post.CookieContainer = cc;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] response = ([Ссылки могут видеть только зарегистрированные и активированные пользователи])post.GetResponse();
string html = new StreamReader(response.GetResponseStream(),
Encoding.UTF8).ReadToEnd();
string[] s = html.Split();
for (int i = 0; i < s.Length; i++)
{
int nachalo = s[i].IndexOf("hash: '");
int konets = s[i].IndexOf("', cats");
string rezult = s[i].Substring(nachalo, konets);
MessageBox.Show(rezult);
}
говорит что у переменной nachalo не может быть колличество меньше нуля. и прога виснит:sceptic:

Добавлено через 3 минуты
box.removeButtons().addButton('Отмена', box.hide, 'no');
cur.addFriend = function() {
ajax.post('al_friends.php', {act: 'add', mid: 1, hash: '353aa443eb13266192', cats: ge('friend_add_cats').value, message: ge('add_msg_text').value}, {onDone: function(text) {
box.content(text);
box.removeButtons().addButton('Закрыть');
setTimeout(function() {
вот то что в ответ приходит (это часть)

Все правильно так то, попробуй отдельно переменные выносить и найдешь ошибку понял где cats переменная конец оставь просто int konets = s[i].IndexOf("'cats");

Deep45
06.04.2011, 21:53
Значение StartIndex не может быть меньше нуля.
Имя параметра: startIndex

Добавлено через 4 минуты
string rezult = s[i].Substring(nachalo, konets); у этой строки такая ошибка (при компилиров.)
Значение StartIndex не может быть меньше нуля.
Имя параметра: startIndex

Hermein
06.04.2011, 22:13
Значение StartIndex не может быть меньше нуля.
Имя параметра: startIndex

Добавлено через 4 минуты
string rezult = s[i].Substring(nachalo, konets); у этой строки такая ошибка (при компилиров.)
Значение StartIndex не может быть меньше нуля.
Имя параметра: startIndex

Делай тогда все по-другому!
: string[] s = html.Split();
for (int i = 0; i < s.Length; i++)
{int nachalo = s[i].IndexOf("hash:");
string result = s[i].Remove(0, nachalo);//удаляешь все что до хэша
//int konets = s[i].IndexOf("cats:");
rezult = s[i].Substring(0, rezult.Lenght);
MessageBox.Show(rezult);

Deep45
06.04.2011, 22:19
string result = s[i].Remove(0, nachalo);
ошибка
Значение счетчика не может быть меньше нуля.
Имя параметра: count

Добавлено через 2 минуты
string[] s = html.Split();
for (int i = 0; i < s.Length; i++)
{
int nachalo = s[i].IndexOf("hash: '");
string result = s[i].Remove(0, nachalo);//к ебеням все что до хэша
int konets = s[i].IndexOf("cats");
string rezult = s[i].Substring(0, konets);
MessageBox.Show(rezult);
}
подправил немного

Hermein
08.04.2011, 21:30
пацаны, а как написать простой парсер например для айсикапа или гарены.

Чарлика, я думаю будет более чем предостаточно.
А потом парсь ответы с пост/гэт запросов

garik_sanek
10.04.2011, 15:03
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

bohdan09
11.04.2011, 19:19
Скачай Видеокурсы по C# ([Ссылки могут видеть только зарегистрированные и активированные пользователи]). Тут есть все. Состоит из 2 частей по 2,5 гига. Парсирование в первой части. Курсы классные сам по им учу.

kLeeNeX
15.04.2011, 01:06
ох лол вы че творите, какой сплит. все проще:
string pattern = ""; //маска
Match isMatch = Regex.Match("это входной текст", pattern, RegexOptions.IgnoreCase);
isMatch.Value //отпарсенный кусок

чтоб маску составить над немного почитать про регулярные выражения. я наловчился, могу ее накидать за пару минуток, только надо видеть структуру входящей строки полностью