- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
public string GetDollarKurs(string input)
{
string dol = "[.\\s]*<img height=\"11\" alt=\"Доллар США\" hspace=\"2\" src=\"/images/icon_dollar.gif\" width=\"11\" align=\"left\" vspace=\"2\" border=\"0\">Доллар \r\n\t\t\tСША</td>\r\n\t\t<td></td>\r\n\t\t<td class=\"digit\" align=\"right\">[\\s]*\\d+\\,\\d+[.\\s]*";
MatchCollection Matches = Regex.Matches(input, dol);
if (Matches.Count == 1)
{
string res = Matches[0].Value;
res = res.Trim();
res = res.Substring(res.LastIndexOf('>') + 1);
return res;
}
else
return "";
}
Функция для получения курса доллара, в input подаётся хтмл главной страницы сайта cbr.ru и парсится.
А web-сервисы пусть кто-нибудь другой изучает... :o)
1. Функция, судя по названию, не должна возвращать стринг
1.а. Это, кстати, избавит от такой ерунды как
return "";
Если не можешь распарсить - кидай эксепшен.
Если эксепшен слишком дорог - сделай функцию bool TryGetDollarKurs(...)
2. Текст курса можно выдернуть регэкспом. Так что операции над строками вообще не нужны. Можно только трим заюзать на всякий случай.
3. Если есть веб сервис, то лучше пользоваться им.
4. Строку регэкспа лучше вынести во внешний соурс - менять код при изменениях чужой разметки - не гуд.
Смысл примерно такой: если GetDollarKurs вернёт пустую строку, то попробуй использовать GetDollarKurs2, а потом что получилось уже конвертировать. :о)
А то с кэшем как-то негормонично получилось бы.
Что может быть тошнотворнее транслита?
Смесь транслита и перевода!