![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Скачиваю HTML и перевожу в String. Сам он довольно здоровый (~50кб). Подскажите как будет привильнее всего сделать (я в принцепе сделал, но больно плохо), чтоб вытащить с HTML определенные данные. Ниже я привел кусок HTML , как вы поняли мне нужно вытащить баланс, фамилию и т.д.
|
|||
|
||||
| Freak_FB |
|
|||
![]() Ктулхувед ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 13.10.2006 Репутация: 1 Всего: 4 |
Я бы использовал регулярные выражения.
|
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Freak_FB так как ты написал, скорее всего не получится, потому что я получаю строку во время выполнения программы. И весь HTML занимает 1500 строчек.
Это сообщение отредактировал(а) ilya_cska - 22.3.2008, 10:40 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
ilya_cska, а почему не получится? = Единственно, HTML-код нужно получить в переменную str в любой момент выполнения программы, ессесно, до того, как прорабатывают регулярные выражения. Или сделать функцию :
Строчка HTML-кода, подаваемого функции должна лишь содержать тег <td>, либо же в одну строчку можно положить ВЕСЬ код (50кб - не так уж и много), но тогда выходные параметры имя-баланс-кредит должны стать массивами ( и из групп match-а значения доставать в массивы ). Это сообщение отредактировал(а) marcusmae - 22.3.2008, 11:58 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Тут происходит как бы наложение строки на строку?
|
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
где? = в аргументе с out? = несовсем. Это - "аргумент на выход", который должен объявить вызывающий, а инициализировать вызываемый. Есть ещё ref - "аргумент по ссылке", который должен объявить и инициализировать вызывающий, а вызываемый _может_ его изменить, причём если изменит, то вызывающий об этом узнает. Подробнее - в MSDN. Если не то имели ввиду, то дайте сюда какой-нибудь полный текст HTML (из тех, с кот. Вы работаете) - может тогда удастся показать нагляднее. -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Если не то имели ввиду, то дайте сюда какой-нибудь полный текст HTML (из тех, с кот. Вы работаете) - может тогда удастся показать нагляднее.
Вот, ссылка на HTML. click Если открыть файл с помощью Notpad++ то информация, которую мне нужно вытащить, находится с 1275 строчке. |
|||
|
||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
ilya_cska, в классе User описана необходимая функциональность, связанная с пользователем. Помимо полей-только-для-чтения Name, Balance и Credit, есть конструктор, вывод сводной информации Summary и статическая функция для извлечения информации из текста HTML :
Оригинальный паттерн регулярного выражения Freak_FB пришлось слегка подредактировать для того, чтобы кредит по признакам не путался со следующими за ним записями. Рекомендую тщательно перепроверить его переносимость, протестировав на большом множестве реальных страниц. Рубли из строки переводятся в численное выражение, что может быть излишне, если не нужно с ними делать никакой арифметики. Вызов мог бы выглядеть так :
Открыли файл читателем и слили весь текст в одну строку. Далее обращаю внимание на крайне нежелательную (например, в плане скорострельности) операцию удаления из текста символов перевода каретки :
Компьютеры, конечно, железные, но могли бы - вздохнули бы горько Полный код программы присоединён. Это сообщение отредактировал(а) marcusmae - 23.3.2008, 21:09 Присоединённый файл ( Кол-во скачиваний: 2 )
Program.cs 3,74 Kb-------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
marcusmae, мож глупый вопрос, а ты файл qwer.txt не исправлял? А то я код твой скачал, а программа выполняет условие
|
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
ilya_cska, нет, я ничего не исправлял. Изменим метод загрузки так, чтобы файл получался напрямую из урл (собсна, так сразу нужно было сделать) :
Результат :
Это сообщение отредактировал(а) marcusmae - 24.3.2008, 13:30 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
marcusmae скинь пожалуйста весь код, а то компилятор ругается.
|
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Все сделал, только все равно пишет В указанном файле информации о пользователе не найдено
полный код
Это сообщение отредактировал(а) ilya_cska - 24.3.2008, 14:53 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Уф, ну это мистификация
Посмотрите, какие у Вас могут возникнуть проблемы. На строковую переменную с текстом через отладчик, например, проверьте, что там всё в порядке с кириллицей и вообще с кодировкой. Успешно перенёс программку на другой компьютер, правда Program.cs пришлось пересохранить в UTF-8... Да вообще, за полдня-то уж можно было всю программу вдоль и поперёк отладчиком излазить - было бы на то Ваше желание. Это сообщение отредактировал(а) marcusmae - 24.3.2008, 16:51 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Может кому понадобиться: HTML to XHTML Conversion with SGMLReader.
|
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Все, спасибо marcusmae.
|
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Появился еще один вопрос. Вот код
Происходиту даления из текста символов перевода каретки. Как сделать, чтоб с типом String так же происходило удаление символов перевода каретки. |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Совершенно непонятный вопрос -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Как удалить перевод каретки из типа String?
|
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Из типа нельзя ничего удалить, тип можно создать. Переменная htmlText как раз имеет тип String. Что Вы имеете в виду? = Вы хотите сузить множество возможных символов? -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Происходит вот что. Если я читаю с файла, то он удаляет во всем тексте перевод каретки. Если я задаю переменную адресом сайта, то удаляются не все символы перевода каретки(не удаляются в тех местах, где расположены скрипты), из-за чего не могу вытащить нужные данные. Вот я и подумал, если весь HTML код сначала перевести в статическую строку, а потом удалить перевод каретки.
Это сообщение отредактировал(а) ilya_cska - 27.3.2008, 13:05 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
ilya_cska, я понял это так, что при том, что Вы берёте разные источники текста, в одном случае - файл, в другом - урл, у Вас получается разный результат. Так вот это возможно только если тексты неидентичны. Никаких багов компилятора и/или полтергейстов с привидениями здесь не замечено. А значит, Вам нужно у себя искать ошибку или искать ошибку в понимании того, о чём Вы говорите. Например, не померещился ли перевод строки из-за того, что блокнот сделал WordWrap для текста?
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Дело в том, что в первом случае - файл, в котором весь текст статичен. В url ,я проверял, он удаляет перевод каретки, но не везде, в местах где есть скрипты он не удаляет.
Ниже я добавлю три файла 1. Взятый прямо с сайта с помощью Opera - Исходный текст 2. Выполнение программы с файлом 1 3. Выполнение программы с url Это сообщение отредактировал(а) ilya_cska - 27.3.2008, 13:05 |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
2 файл
Это сообщение отредактировал(а) ilya_cska - 27.3.2008, 13:05 |
|||
|
||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
3 файл
Это сообщение отредактировал(а) ilya_cska - 27.3.2008, 13:04 |
|||
|
||||
| Optimus |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 1.9.2007 Репутация: 1 Всего: 14 |
из переменной типа String, да ? из msdn
тогда, IMHO, надо сделать так:
--------------------
"постановка задачи наполовину решает саму задачу" |
||||
|
|||||
| ilya_cska |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 25.1.2008 Репутация: нет Всего: нет |
Спасибо Optimus, marcusmae. Все работает
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |