| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Подскажите как правильно |
| Автор: ilya_cska 20.3.2008, 14:08 | ||
Скачиваю HTML и перевожу в String. Сам он довольно здоровый (~50кб). Подскажите как будет привильнее всего сделать (я в принцепе сделал, но больно плохо), чтоб вытащить с HTML определенные данные. Ниже я привел кусок HTML , как вы поняли мне нужно вытащить баланс, фамилию и т.д.
|
| Автор: Freak_FB 20.3.2008, 14:47 | ||
Я бы использовал регулярные выражения.
|
| Автор: ilya_cska 22.3.2008, 10:38 |
| Freak_FB так как ты написал, скорее всего не получится, потому что я получаю строку во время выполнения программы. И весь HTML занимает 1500 строчек. |
| Автор: marcusmae 22.3.2008, 11:56 | ||
ilya_cska, а почему не получится? = Единственно, HTML-код нужно получить в переменную str в любой момент выполнения программы, ессесно, до того, как прорабатывают регулярные выражения. Или сделать функцию :
Строчка HTML-кода, подаваемого функции должна лишь содержать тег <td>, либо же в одну строчку можно положить ВЕСЬ код (50кб - не так уж и много), но тогда выходные параметры имя-баланс-кредит должны стать массивами ( и из групп match-а значения доставать в массивы ). |
| Автор: ilya_cska 22.3.2008, 13:36 |
| Тут происходит как бы наложение строки на строку? |
| Автор: marcusmae 22.3.2008, 14:35 |
где? = в аргументе с out? = несовсем. Это - "аргумент на выход", который должен объявить вызывающий, а инициализировать вызываемый. Есть ещё ref - "аргумент по ссылке", который должен объявить и инициализировать вызывающий, а вызываемый _может_ его изменить, причём если изменит, то вызывающий об этом узнает. Подробнее - в MSDN. Если не то имели ввиду, то дайте сюда какой-нибудь полный текст HTML (из тех, с кот. Вы работаете) - может тогда удастся показать нагляднее. |
| Автор: ilya_cska 22.3.2008, 14:50 |
| Если не то имели ввиду, то дайте сюда какой-нибудь полный текст HTML (из тех, с кот. Вы работаете) - может тогда удастся показать нагляднее. Вот, ссылка на HTML. http://artem-bazar.110mb.com/qwer.txt Если открыть файл с помощью Notpad++ то информация, которую мне нужно вытащить, находится с 1275 строчке. |
| Автор: marcusmae 23.3.2008, 21:08 | ||||||
ilya_cska, в классе User описана необходимая функциональность, связанная с пользователем. Помимо полей-только-для-чтения Name, Balance и Credit, есть конструктор, вывод сводной информации Summary и статическая функция для извлечения информации из текста HTML :
Оригинальный паттерн регулярного выражения Freak_FB пришлось слегка подредактировать для того, чтобы кредит по признакам не путался со следующими за ним записями. Рекомендую тщательно перепроверить его переносимость, протестировав на большом множестве реальных страниц. Рубли из строки переводятся в численное выражение, что может быть излишне, если не нужно с ними делать никакой арифметики. Вызов мог бы выглядеть так :
Открыли файл читателем и слили весь текст в одну строку. Далее обращаю внимание на крайне нежелательную (например, в плане скорострельности) операцию удаления из текста символов перевода каретки :
Компьютеры, конечно, железные, но могли бы - вздохнули бы горько Полный код программы присоединён. |
| Автор: ilya_cska 24.3.2008, 08:46 | ||
marcusmae, мож глупый вопрос, а ты файл qwer.txt не исправлял? А то я код твой скачал, а программа выполняет условие
|
| Автор: marcusmae 24.3.2008, 13:29 | ||||
ilya_cska, нет, я ничего не исправлял. Изменим метод загрузки так, чтобы файл получался напрямую из урл (собсна, так сразу нужно было сделать) :
Результат :
|
| Автор: ilya_cska 24.3.2008, 14:34 |
| marcusmae скинь пожалуйста весь код, а то компилятор ругается. |
| Автор: ilya_cska 24.3.2008, 14:51 | ||
| Все сделал, только все равно пишет В указанном файле информации о пользователе не найдено полный код
|
| Автор: marcusmae 24.3.2008, 16:45 |
| Уф, ну это мистификация http://ipicture.ru/Gallery/Viewfull/1033940.html Посмотрите, какие у Вас могут возникнуть проблемы. На строковую переменную с текстом через отладчик, например, проверьте, что там всё в порядке с кириллицей и вообще с кодировкой. Успешно перенёс программку на другой компьютер, правда Program.cs пришлось пересохранить в UTF-8... Да вообще, за полдня-то уж можно было всю программу вдоль и поперёк отладчиком излазить - было бы на то Ваше желание. |
| Автор: ivashkanet 24.3.2008, 17:02 |
| Может кому понадобиться: http://www.eggheadcafe.com/articles/20030317.asp. |
| Автор: ilya_cska 25.3.2008, 11:32 |
| Все, спасибо marcusmae. |
| Автор: ilya_cska 25.3.2008, 14:20 | ||
Появился еще один вопрос. Вот код
Происходиту даления из текста символов перевода каретки. Как сделать, чтоб с типом String так же происходило удаление символов перевода каретки. |
| Автор: ilya_cska 26.3.2008, 01:45 |
| Как удалить перевод каретки из типа String? |
| Автор: marcusmae 26.3.2008, 02:30 |
Из типа нельзя ничего удалить, тип можно создать. Переменная htmlText как раз имеет тип String. Что Вы имеете в виду? = Вы хотите сузить множество возможных символов? |
| Автор: ilya_cska 26.3.2008, 09:41 | ||
Происходит вот что. Если я читаю с файла, то он удаляет во всем тексте перевод каретки. Если я задаю переменную адресом сайта, то удаляются не все символы перевода каретки(не удаляются в тех местах, где расположены скрипты), из-за чего не могу вытащить нужные данные. Вот я и подумал, если весь HTML код сначала перевести в статическую строку, а потом удалить перевод каретки.
|
| Автор: marcusmae 26.3.2008, 13:52 |
| ilya_cska, я понял это так, что при том, что Вы берёте разные источники текста, в одном случае - файл, в другом - урл, у Вас получается разный результат. Так вот это возможно только если тексты неидентичны. Никаких багов компилятора и/или полтергейстов с привидениями здесь не замечено. А значит, Вам нужно у себя искать ошибку или искать ошибку в понимании того, о чём Вы говорите. Например, не померещился ли перевод строки из-за того, что блокнот сделал WordWrap для текста? |
| Автор: ilya_cska 26.3.2008, 14:45 |
| Дело в том, что в первом случае - файл, в котором весь текст статичен. В url ,я проверял, он удаляет перевод каретки, но не везде, в местах где есть скрипты он не удаляет. Ниже я добавлю три файла 1. Взятый прямо с сайта с помощью Opera - Исходный текст 2. Выполнение программы с файлом 1 3. Выполнение программы с url |
| Автор: ilya_cska 26.3.2008, 14:49 |
| 2 файл |
| Автор: ilya_cska 26.3.2008, 14:49 |
| 3 файл |
| Автор: Optimus 26.3.2008, 18:22 | ||||
из переменной типа String, да ? из msdn
тогда, IMHO, надо сделать так:
|
| Автор: ilya_cska 27.3.2008, 10:09 |
| Спасибо Optimus, marcusmae. Все работает |