Страница: 1 |
Страница: 1 |
Вопрос: "Изъять" нужные данные из текста
Добавлено: 02.06.06 10:38
Автор вопроса: mr.daBUTCH
Есть внутренний корпоративный веб-сайт (IIS, ASP). Хочу сделать на нем отображение курсов валют, ЕВРО и Доллара. Для начала VBScript должен прочитать страницу www.rbc.ru, это я осилил:
<%
WinHttp object
Dim WinHttpReq
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim sTemp
WinHttpReq.Open "GET", "http://www.rbc.ru", False
WinHttpReq.Send
If (WinHttpReq.Status = 200) Then
sTemp = WinHttpReq.ResponseText
WebText = sTemp
Else
WebText = "Failed to retrieve"
End If
%>
Теперь нужно провести поиск по полученному тексту...
1. Найти в тексте строку "USD ЦБ РФ"
2. Запомнить позицию (номер символа) начала этой искомой строки.
3. прибавить к этой позиции 15 символов (таким образом мы получим номер символа, с которого собственно и начинается курс)
4. Скопировать строку начиная с этой позиции до первого встречающегося символа "<", в переменную USDCourse
ПОМОГИТЕ ПЛЗ
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 02.06.06 11:13
InStr$, Left$, Mid$
Номер ответа: 2
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #2
Добавлено: 02.06.06 11:56
нельзя ли привести текст ? (я только-только учусь еще)
Номер ответа: 3
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #3
Добавлено: 02.06.06 13:45
Разобрался, вот что получилось
но вот еще один вопрос, как можно преобразовать полученную строку "26.8868" в число 26.8868 ?
Номер ответа: 4
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #4
Добавлено: 02.06.06 13:47
Разобрался, все получилось, есть только проблемка еще одна, можно ли как-то по простому преобразовать полученную текстовую строку "26.8868" в число 26.8868 ?
Номер ответа: 5
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #5
Добавлено: 02.06.06 14:29
Val("47474747"
Номер ответа: 6
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #6
Добавлено: 02.06.06 14:47
HOOLIGAN, помоги пожалуйста разобраться, я всю голову уже сломал... Вот что у меня получилось:
Dim WinHttpReq
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1"
Dim sTemp
WinHttpReq.Open "GET", "http://www.rbc.ru", False
WinHttpReq.Send
If (WinHttpReq.Status = 200) Then
sTemp = WinHttpReq.ResponseText
WebText = sTemp
Else
WebText = "Failed"
End If
count= InStr(Webtext, "USD ЦБ РФ"
count_usd_date=count+61
count_usd_course=count+120
count_end=InStr(count_usd_course, Webtext, "<"
lenght_usd=count_end-count_usd_course
if ( Len(lenght_usd) > 7) Then
lenght_usd=7
Else
End If
usd_date=Mid(Webtext, count_usd_date, 5)
usd_course=Mid(Webtext, count_usd_course, lenght_usd)
if ( IsDate(usd_date) = False) Then
usd_date="Ошибка"
Else
End If
val(usd_course)
Wscript.Echo usd_date, usd_course
Фишка в том, что и val и ccur говорят о несоответствии типа данных (там подтип 8), никак не могу преобразовать эту строку в currency, хелп
Номер ответа: 7
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #7
Добавлено: 02.06.06 15:21
Я не в курсе, как обстоит дело в VBScript с типами данных.
Посмотри такие моменты: может в usd_course кроме числа влез знак $, потом попробуй заменить точку (разделитель целой и дробной части) на запятую:
val(Replace(usd_course, ".",",")
Номер ответа: 8
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #8
Добавлено: 02.06.06 15:26
И попробуй вывести не переменную, а непосредственно строку:
Val("26.8868"
если выводит нормально, то попробуй явно объявить usd_course As String.
Попробуй также Val("26" - чтобы определиться, что не нравится этому VBScript
Пробуй, анализируй.
Номер ответа: 9
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #9
Добавлено: 02.06.06 15:50
блин, ругается даже на val("26"
говорит несоответствие типа
Номер ответа: 10
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #10
Добавлено: 02.06.06 15:53
и то же самое на CCur("1212.22222", странно
Номер ответа: 11
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #11
Добавлено: 02.06.06 16:07
Ну что, будем методом научного тыка (ибо нет у меня возможности самому попробовать)
The Val function recognizes only the period (.) as a valid decimal separator. When different decimal separators are used, as in international applications, use CDbl instead to convert a string to a number.
Значит, разделитель должен быть точкой, но в случае с Val("26" всё ровно
Попробуй CDbl - она практически близнец Val'а
Номер ответа: 12
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #12
Добавлено: 02.06.06 16:48
Смысл в таких извращениях, если курсы можно получить из XML-сервиса
Центробанка на cbr.ru?
Номер ответа: 13
Автор ответа:
Артем
ICQ: 312119975
Вопросов: 0
Ответов: 6
Профиль | | #13
Добавлено: 04.06.06 20:49
Cint("26.3"=>26.3
Номер ответа: 14
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #14
Добавлено: 04.06.06 22:42
Cint округлит до 26.
Номер ответа: 15
Автор ответа:
mr.daBUTCH
Вопросов: 1
Ответов: 7
Профиль | | #15
Добавлено: 05.06.06 07:36
нет ли каких-нибудь примеров реализации этого ? насколько я понимаю общий смысл будет тот же, загрузка документа и поиск нужных значений в его тексте, там, кстати котировки также будут представлены в виде строк