Вечер добрый! Вот такой вопрос у меня встал - мне нужно распарсить таблицу. Кто может поделиться как это будет лучше сделать?
Какой язык, скинул бы пример таблицы? .xls, html? В ООЯП есть свои классы для работы с xls. В html таблице приводишь все в строку, потом используешь методы типа Replace, Split. А так с таким вопросом, пальцем в небо...
на C# страница HTML. Не xml. Просто регулярными выражениями там будет очень тяжело. я пытался Xpatch использовать - но не получается.
HtmlAgilityPack как вариант попробуй, регулярными тоже самое. Вот пример под эту страничку: forum.kazahstanki.com/memberlist.php Code: var html1 = Encoding.Default.GetString(b1); string s = Strip(html1); var startIndex = s.IndexOf("Аватар") + "Аватар".Length; var endIndex = s.IndexOf("Показано с ", startIndex); var res = s.Substring(startIndex, endIndex - startIndex); string i1 = res.Replace(" ", string.Empty); string i2 = i1.Replace("\t", string.Empty); string[] arr = i2.Trim().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arr.Length - 1; i += 3) { string nick = arr[i]; string rank = arr[i + 1].Split(' ')[0]; userslist.Add(nick); }
Да, я читал эту статья и пытался сделать. Для контакта с самого примера все работает. Для этого же сайта не хочет Code: var doc = VkRequest.Request("http://www.buker.ru/dostaken.php").GetHtmlDocument(); var postNodes = doc.DocumentNode.SelectNodes("//table[@class='moduletable1']/tbody/tr/td[1]"); List<string> posts = new List<string>(); foreach (var item in postNodes) { MessageBox.Show(item.OuterHtml); } сам запрос составлен правильно. Ошибка возникает в foreach(ругается на postNodes) - Сслылка на объект не указывает на экземпляр объекта.
ты задаешь неправильный критерий выбора нодов, соответственно оно ничего не выбирает и не с чем работать в foreach . Да и для той страницы регулярные выражения тебе в помощь.
так почему регулярными? на блоге каироса написано что регулярными выражениями невозможно распарсить всю страницу. Сам когда парсил сложные структуры, регулярками сложно, требовалось выделять более обобщёные участки, а потом уже искать в них. Используй другие альтернативы. P.S привет от пиликана!
регулярными сложнее(смотря для кого), но более эффективно. Все, что вы там используете в основе лежат регулярные выражения. И сам ваш великий кайрос брал за основу своих классов регулярные выражения. На том блоге, вы тупо копируете текст, классы, и не поймете вообще как этот код работает, не говорю уже, об элементарной проверке кода.
ну на C# писать много ума не нужно(наверное у него самое низкий "уровень сложности вхождения"), прочитал книжку по синтаксису и сидишь с инета копируешь готовые примеры с классами(ваш случай). Да весь framework сделали вам в помощь. Пишите, используя уже все готовое и все. А как это внутри работает это уже не важно... Или же сравни это же с ASM\C
Скажу по секрету: много ума вообще не нужно чтобы писать мелкие программки, а вот когда в проекте сотни тысяч строк то еще как нужно хоть на шарпе, хоть на Си. Вообще оснвная сложность в программировании это скорее проектирование и сопутствующие вещи. Набив руку, используя готовые либы и плагины по типу решарпера можно вообще писать по 5к-10к строк в в день. Получается что даже один программист сможет запросто реализовывать по 1 среднему проекту в месяц. Чего как раз таки не получается, ибо лично у меня больше времени не на само кодирование уходит. Нужна мне например работа с файлами, простое чтение/запись. Зачем мне вдаваться в детали работы с файлами в винАпи, тем самым отвлекаясь от своей предметной области в такую слишком проблемно-ориентированную (а еще и платформо-зависимую) проблему, тем самым занимаясь не тем что нужно и ковыряясь в устаревшем апи из 80-х?
ну ооп и придумано для облегчения работы в "промышленных" масштабах, но если тип использует классы, которые он не знает и на 10% из чего они состоят, то я думаю написать 10 строчек кода, которые он понимает намного лучше чем 2 в которых он вообще не разбирается. А насчет винапи, кстати хороший пример, была недавно проблема, под C# нужно было писать кое-что с использованием WinApi, пришлось делать свои классы, но чтобы их сделать полез изучать все эти особенности. Но смысл в том, что это мои классы и я знаю, что делает каждая строчка кода...
inCode, харэ тут разводить базар, что ты крутой прогер, тут как бы проблема совсем другая была и не нужно тут включать супермена GhostOnline, я полностью с ним согласен, нужно не забывать код, который уже написали и лучше написать что-то новое, а не тратиться на то что уже 100500 раз делали.