1. VisualBasic / Говнокод #3177

    −359

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Private Function Leto(ByVal Dat1 As Date) As Boolean
    Return IIf(Dat1.Month > 3 And Dat1.Month < 9, True, False)
    End Function
    
    Private Function Bas(ByVal Cost1 As Decimal, ByVal Kol1 As Integer)
    Return Cost1 * Kol1
    End Function

    вообще это по линку cfdevа лежало в #3142
    http://www.sql.ru/forum/actualthread.aspx?bid=9&tid=467673&hl=

    но он не запостил самое гавно - то есть этот кусок
    и его походу мало кто заметил

    3.14159265, 07 Мая 2010

    Комментарии (24)
  2. VisualBasic / Говнокод #3142

    −114

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    Public Function Cost(ByVal Vip1 As Boolean, ByVal Dat1 As Date, ByVal Kol1 As Integer, ByVal Cost1 As Decimal) As Decimal
    
            If Vip1 Then
                Return Bas(Cost1, Kol1) * 0.9 + IIf(Cost1 * Kol1 < 50, 50, Bas(Cost1, Kol1) * 0.11)
            Else
                Dim Sk1 As Decimal
                If Leto(Dat1) Then
                    Sk1 = IIf(Bas(Cost1, Kol1) < 1000, 2, 3)
                Else
                    Sk1 = IIf(Bas(Cost1, Kol1) < 1100, 3, 0)
                End If
                Dim Sk2 As Decimal = IIf(Kol1 > 500, 5, 0)
                Dim Sk3 As Decimal
                If Leto(Dat1) Then
                    Sk3 = IIf(Bas(Cost1, Kol1) < 100, 100, Bas(Cost1, Kol1) * 0.1)
                Else
                    Sk3 = IIf(Bas(Cost1, Kol1) < 110, 110, Bas(Cost1, Kol1) * 0.11)
                End If
                Return (Bas(Cost1, Kol1) - Bas(Cost1, Kol1) * Sk1 * 100 - Bas(Cost1, Kol1) * Sk2 * 100 + Sk3)
            End If
        End Function

    Стандартный ынтырпрайз-говнокод, но изюминка, собсно, не в нём, а в нём:

    http://www.sql.ru/forum/actualthread.aspx?bid=9&tid=467673&hl=

    2striker. теперь предпросмотр показывает всегда не php, а си. Спасибо за фикс.

    cfdev, 01 Мая 2010

    Комментарии (5)
  3. VisualBasic / Говнокод #3108

    −86

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    using System;
    using System.Web;
    using MaxPro;
    
    namespace HandlerFile
    {
    	public class FileHttpHandler : IHttpHandler
    	{
    		// Переопределяем метод ProcessRequest.
    		public void ProcessRequest(HttpContext context)
    		{
    			//var
    			Byte[] oImg;
    			Int32 iId=0;
    			Int32 iRemInt=0;
    			//var Zap
    			Int32 iNum=0;
    			Exception oErr;
    			Object[,] oZap=new Object[0,0];
    			//end var
    			if(All.IsInteger(context.Request.QueryString["iId"]))
    			{
    				iId=Convert.ToInt32(context.Request.QueryString["iId"]);
    				iNum=Ow.iZap1i("OneWindow.Procedure173","@iId",iId,out oZap,out oErr);
    			}
    			else if(All.IsInteger(context.Request.QueryString["iRemInt"]))
    			{
    				iId=Convert.ToInt32(context.Request.QueryString["iRemInt"]);
    				iNum=Ow.iZap1i("OneWindow.Procedure174","@iRemInt",iRemInt,out oZap,out oErr);
    			}
    			if(iNum>0)
    			{
    				oImg=(Byte[])oZap[0,0];
    				//генерация бинарного потока
    				/* Возможно пригодится, хотя ясности нет зачем,
    				 * но когда ie сбоит и не открывает файл, то это помогает, особенно ClearHeaders
    				 * Response.ClearContent()
    				 * Response.ClearHeaders()
    				 *///
    				context.Response.ContentEncoding=System.Text.Encoding.GetEncoding("UTF-8");
    				context.Response.Charset="UTF-8";
    				context.Request.ContentEncoding=System.Text.Encoding.UTF8;
    				switch (Convert.ToString(oZap[2,0]))
    				{
    					case "gif":
    						context.Response.ContentType="image/GIF";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "jpg":
    						context.Response.ContentType="image/JPEG";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "jpeg":
    						context.Response.ContentType="image/JPEG";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "bmp":
    						context.Response.ContentType="image/BMP";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "png":
    						context.Response.ContentType="image/PNG";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "txt":
    						context.Response.ContentType="text/plain";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "htm":
    						context.Response.ContentType="text/HTML";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "html":
    						context.Response.ContentType="text/HTML";
    						context.Response.AddHeader("Content-Disposition","filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "xls":
    						context.Response.ContentType="application/vnd.ms-excel";
    						context.Response.AddHeader("Content-Disposition","attachment; filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "doc":
    						context.Response.ContentType="application/msword";
    						context.Response.AddHeader("Content-Disposition","attachment; filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "dot":
    						context.Response.ContentType="application/msword";
    						context.Response.AddHeader("Content-Disposition","attachment; filename="+Convert.ToString(oZap[1,0]));
    						break;
    					case "ppt":
    						context.Response.ContentType="application/vnd.ms-powerpoint";
    						context.Response.AddHeader("Content-Disposition","attachment; filename="+Convert.ToString(oZap[1,0]));
    						break;
    					default:
    						context.Response.AddHeader("Content-Disposition","attachment; filename="+Convert.ToString(oZap[1,0]));
    						break;
    				}
    				context.Response.OutputStream.Write(oImg,0,oImg.Length);
    			}
    		}

    а вам слабо? всё те же мос окна

    ursus, 26 Апреля 2010

    Комментарии (9)
  4. VisualBasic / Говнокод #3100

    −92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    public class Chart//работа с ChartSpace
    	{
    		/* String sCategories="значение1"+СимволТабуляции(символ с кодом 9)+"значение2"+...
    		 * String sValues="значение1"+СимволТабуляции(символ с кодом 9)+"значение2"+...
    		 */
    		//В VB6 также вместе со "строками через табулятор" поддерживаются одномерные массивы
    		//var
    		public const String sProcedure001 = "OneWindow.Procedure121";
    		public const String sProcedure002 = "OneWindow.Procedure122";
    		public const String sProcedure003 = "OneWindow.Procedure123";
    		public const String sProcedure004 = "OneWindow.Procedure124";
    		public const String sProcedure005 = "OneWindow.Procedure125";
    		public static Int32 iDataLiteral = Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral);
    		public static Object[,] _oZap001;
    		public static Object[,] _oZap002;
    		public static Object[,] _oZap003;
    		public static Object[,] _oZap004;
    		public static Object[,] _oZap005;
    		//end var
    		//property
    		public static Object[,] oZap001
    		{
    			//var
    			//end var
    			get
    			{
    				Int32 iNum = 0;
    				Exception oErr;
    				if (_oZap001 == null)
    				{
    					iNum = Ow.iZap0(sProcedure001, out _oZap001, out oErr);
    					if (iNum <= 0)
    					{
    						_oZap001 = null;
    					}
    				}
    				return _oZap001;
    			}
    		}
    		public static Object[,] oZap002
    		{
    			//var
    			//end var
    			get
    			{
    				Int32 iNum = 0;
    				Exception oErr;
    				if (_oZap002 == null)
    				{
    					iNum = Ow.iZap0(sProcedure002, out _oZap002, out oErr);
    					if (iNum <= 0)
    					{
    						_oZap002 = null;
    					}
    				}
    				return _oZap002;
    			}
    		}
    		public static Object[,] oZap003
    		{
    			//var
    			//end var
    			get
    			{
    				Int32 iNum = 0;
    				Exception oErr;
    				if (_oZap003 == null)
    				{
    					iNum = Ow.iZap0(sProcedure003, out _oZap003, out oErr);
    					if (iNum <= 0)
    					{
    						_oZap003 = null;
    					}
    				}
    				return _oZap003;
    			}
    		}
    		public static Object[,] oZap004
    		{
    			//var
    			//end var
    			get
    			{
    				Int32 iNum = 0;
    				Exception oErr;
    				if (_oZap004 == null)
    				{
    					iNum = Ow.iZap0(sProcedure004, out _oZap004, out oErr);
    					if (iNum <= 0)
    					{
    						_oZap004 = null;
    					}
    				}
    				return _oZap004;
    			}
    		}
    		public static Object[,] oZap005
    		{
    ...

    Я нашел абсолютное гавно!!!!!!
    Максим Прохоров торжественно спиздил исходники сайта okno.mos.ru и забыл в конторе (хуй он забыл, на самом деле я ему доступ закрыл в один прекрасный момент).
    Теперь буду выкладывать маленькими порциями. представляете, за это гавно отвалили миллионов 10. Чиновники их дружно освоили. А отвалили из нашего кармана. Я лично налоги плачу.

    ursus, 23 Апреля 2010

    Комментарии (24)
  5. VisualBasic / Говнокод #3091

    −89

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    Public Class TreeKuBi003
    			''' -----------------------------------------------------------------------------
    			''' <summary>
    			''' Подключение KuBi.
    			''' </summary>
    			''' <remarks>
    			''' </remarks>
    			''' <history>
    			''' 	[Max Pro]	30.01.2009	Created
    			''' </history>
    			''' -----------------------------------------------------------------------------
    			Public Const sKuBi As String = _
    			"	SELECT" & sEnter & _
    			"		iIdTreeKuBi," & sEnter & _
    			"		iIdTreeNone" & sEnter & _
    			"	FROM" & sEnter & _
    			"	    TreeKuBiNone" & sEnter & _
    			"	ORDER BY" & sEnter & _
    			"		iIdTreeKuBi;"
    		End Class		 'TreeKuBi003
    		'''

    А так Максим Прохоров использует классы. На мой вопрос - максим, а зачем тебе нужны классы?
    - ну, чтобы хранить данные.

    ursus, 23 Апреля 2010

    Комментарии (7)
  6. VisualBasic / Говнокод #3090

    −105

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    ''' <summary>
    	''' Функция взятия запроса как инструкции t/sql; рекордсет возвращается в виде oZap(,).
    	''' </summary>
    	''' <param name="eConnectString">Строка подключения к БД из списка.</param>
    	''' <param name="sText">Инструкция t/sql.</param>
    	''' <param name="oErr">Необязательная ошибка.</param>
    	''' <param name="oZap">Необязательный двумерный массив, содержащий рекордсет ― 1-ю таблицу датасета.</param>
    	''' <param name="iTimeout">Необязательное число секунд таймаута запроса.</param>
    	''' <returns>Число затронутых строк в таблице БД; если ноль, то нормально ещё, а если -1, то запрос не прошёл, если -2, то соединение не установилось.</returns>
    	''' <remarks>
    	''' </remarks>
    	''' <history>
    	''' 	[Max Pro]	11.04.2007	Created
    	''' 	[Max Pro]	08.08.2008	Реабилитировал OleDb.
    	''' 	[Max Pro]	08.04.2009	Оптимизировал как надо ReDim Preserve и переполнение Integer.
    	''' 	[Max Pro]	27.08.2009	Исправил ошибку ReDim Preserve ― было больше на 1 элемент.
    	''' </history>
    	''' -----------------------------------------------------------------------------
    	Public Function iZap(ByVal eConnectString As ConnectString, ByVal sText As String, Optional ByRef oErr As Exception = Nothing, Optional ByRef oZap(,) As Object = Nothing, Optional ByVal iTimeout As Integer = -1) As Integer
    		'#region "var"
    		Dim iX As Integer
    		Dim lY As Long
    		Dim lYTemp As Long
    		Dim i As Integer
    		Dim iZapTemp As Integer
    		'var zap
    		Dim sConnectString As String = sConStrFromEnum(eConnectString)
    		Dim oConnection
    		Dim oCommand
    		Dim oReader
    		'#end region 'var
    		'#region ini
    		If sConnectString Like "*sqloledb*" Then
    			oConnection = New OleDbConnection
    			oCommand = New OleDbCommand
    		Else
    			oConnection = New SqlConnection
    			oCommand = New SqlCommand
    		End If
    		'#end region 'ini
    		iZap = -2
    		oErr = New Exception
    		oConnection.ConnectionString = sConnectString
    		Try
    			'попытка открытия соединения
    			oConnection.Open()
    			If oConnection.State Then iZap = -1 'if <>0
    			'присвоение параметров команды
    			If iTimeout >= 0 Then oCommand.CommandTimeout = iTimeout
    			oCommand.CommandType = CommandType.Text
    			oCommand.Connection = oConnection
    			oCommand.CommandText = sText
    			'попытка выполнения команды
    			oReader = oCommand.ExecuteReader()
    			iZap = 0
    			iX = oReader.FieldCount - 1
    			lY = -1
    			lYTemp = 255
    			ReDim oZap(iX, lYTemp)
    			While oReader.Read()
    				lY += 1
    				If lY < Integer.MaxValue Then				 '2 147 483 647-1(заменил <= на < чтобы число элементов iZap не зашкалило).
    					iZapTemp = lY + 1
    					If lY > lYTemp Then
    						lYTemp += 256
    						ReDim Preserve oZap(iX, lYTemp)
    					End If
    					For i = 0 To iX
    						If IsDBNull(oReader(i)) Then oZap(i, lY) = Nothing Else oZap(i, lY) = oReader(i)
    					Next i
    				End If
    			End While
    			oReader.Close()
    			oReader = Nothing
    			oCommand = Nothing
    			iZap = iZapTemp
    			ReDim Preserve oZap(iX, iZapTemp - 1)
    			If lY >= Integer.MaxValue Then
    				oErr = New Exception(lY.ToString("# ##0") & " строк >=" & Integer.MaxValue & " (Integer.MaxValue), но массив заполнен до предела Int32 и iZap=Integer.MaxValue.")
    			End If
    		Catch oError As Exception
    			oErr = oError
    		Finally
    			If IsNothing(oConnection) = False Then
    				oConnection.Close()
    				oConnection = Nothing
    			End If
    		End Try
    	End Function	  'iZap

    А так Максим Прохоров выполняет запросы. слабо?

    ursus, 23 Апреля 2010

    Комментарии (10)
  7. VisualBasic / Говнокод #3089

    −110

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    ''' <summary>
    	''' Возвращает Boolean по правилам Бэйсика: если объект является ненулевым 
    числом или истиной, тогда true, иначе false; переваривает все типы.
    	''' </summary>
    	''' <param name="o"></param>
    	''' <returns></returns>
    	''' <remarks>
    	''' </remarks>
    	''' <history>
    	''' 	[Max Pro]	13.04.2007	Created
    	''' </history>
    	''' -----------------------------------------------------------------------------
    	Public Function bBoolean(ByVal o) As Boolean
    		If bIsBoolean(o) Then bBoolean = o
    	End Function
    	'''

    Расскажу немного о Максиме Прохорове. Он окончил универ им. Баумана с красным дипломом, потом работал над программой okno.mos.ru потом его взяли в частную контору на бешеные бабки.
    Это функция проверки ^

    ursus, 23 Апреля 2010

    Комментарии (13)
  8. VisualBasic / Говнокод #3088

    −90

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    ''' Список строк подключения.
    	''' 	[Max Pro]	11.04.2007	Created
    	Public Enum ConnectString
    		Grata
    		Grata6
    		KuBi
    		OneWindow
    		OneWindowStat
    		OWSite
    		Wwwsde
    		NoName
    		OleGrata
    		OleGrata6
    		OleKuBi
    		OleOneWindow
    		OleOneWindowStat
    		OleOWSite
    		OleWwwsde
    		OleNoName
    	End Enum
    	''' <summary>
    	''' Выдаёт ограниченную дату и время для t/sql; tDateTime  ∈ [1900,2078], 
    ограничивается только год, остальное остаётся вплоть до миллисекунд; переваривает все типы.
    	''' </summary>
    	''' <param name="o"></param>
    	''' <returns></returns>
    	''' <remarks>
    	''' </remarks>
    	''' <history>
    	''' 	[Max Pro]	11.04.2007	Created
    	''' 	[Max Pro]	13.04.2007	Улучшил.
    	''' 	[Max Pro]	16.04.2007	Изменил наименование tDateTime2Tsql на tDateTsql.
    	''' </history>
    	''' -----------------------------------------------------------------------------
    	Public Function tDateTsql(ByVal o) As Date
    		Dim tDate As Date
    		If bIsDateNet(o) Then tDate = o
    		If Year(tDate) < 1900 Then tDate = New Date(1900, tDate.Month, tDate.Day, tDate.Hour, tDate.Minute, tDate.Second, tDate.Millisecond)
    		If Year(tDate) > 2078 Then tDate = New Date(2078, tDate.Month, tDate.Day, tDate.Hour, tDate.Minute, tDate.Second, tDate.Millisecond)
    		tDateTsql = tDate
    	End Function
    	'''

    Енум имени максима прохорова.
    И функция конферта даты. пыгает слово улучшил

    ursus, 23 Апреля 2010

    Комментарии (6)
  9. VisualBasic / Говнокод #3087

    −91

    1. 1
    Public Const sEnter As String = Chr(13) & Chr(10)

    Нам разум не друг и ум не товарищ!
    Постоянная имени Максима Прохорова

    ursus, 23 Апреля 2010

    Комментарии (8)
  10. VisualBasic / Говнокод #3081

    −101

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    REM Юникод UTF-8 с сигнатурой.
    Option Compare Text
    Imports System
    Imports System.Web
    Imports ClassLibraryAll
    Namespace HandlerAll
    REM Вэб-запрос курсов валют и на какую дату.
    Public Class Course
    Implements IHttpHandler
    REM Переопределяем метод ProcessRequest.
    Public Sub ProcessRequest(ByVal oContext As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
    '#region var
    Dim b As Boolean
    Dim iLang As Integer
    Dim tDate1 As Date
    Dim tDate2 As Date
    Dim dD1 As Double
    Dim dD2 As Double
    Dim dE1 As Double
    Dim dE2 As Double
    Dim sAnswer As String 'текст ответа
    Dim sResponse As String 'текст респонса
    Dim oWebClient As New System.Net.WebClient
    Dim oRegExDate1 As New System.Text.RegularExpressions.Regex("target\=_blank\s*>с \d+\.\d+\.\d+\s*<\/A>\s*<\/td>\s*<td>")
    Dim oRegExInDate1 As New System.Text.RegularExpressions.Regex("\d+\.\d+\.\d+")
    Dim oRegExDate2 As New System.Text.RegularExpressions.Regex("target\=_blank\s*>с \d+\.\d+\.\d+\s*<\/A>\s*<\/td>\s*<\/tr>")
    Dim oRegExInDate2 As New System.Text.RegularExpressions.Regex("\d+\.\d+\.\d+")
    Dim oRegExD1 As New System.Text.RegularExpressions.Regex("США<\/td>\s*<td><\/td>\s*<td\sclass\=""digit""\salign\=""right"">\d+,\d+ <\/td>")
    Dim oRegExInD1 As New System.Text.RegularExpressions.Regex("\d+,\d+")
    'Dim oRegExD2 As New System.Text.RegularExpressions.Regex(">\d+,\d+ <IMG\salt\='.+'\sborder\=0\sheight\=8\shspace\=2\ssrc\=\/images\/.+\.gif\swidth\=7><\/td>\s*<\/tr>\s*<tr>\s*<td>")
    Dim oRegExD2 As New System.Text.RegularExpressions.Regex(">\d+,\d+ <img\salt\='.+'\sborder\=""0""\sheight\=""8""\shspace\=""2""\ssrc\=""\/images\/.+\.gif""\swidth\=""7""><\/td>\s*<\/tr>\s*<tr>\s*<td>")
    Dim oRegExInD2 As New System.Text.RegularExpressions.Regex("\d+,\d+")
    Dim oRegExE1 As New System.Text.RegularExpressions.Regex("Евро<\/td>\s*<td><\/td>\s*<td\sclass\=""digit""\salign\=""right"">\d+,\d+ <\/td>")
    Dim oRegExInE1 As New System.Text.RegularExpressions.Regex("\d+,\d+")
    'Dim oRegExE2 As New System.Text.RegularExpressions.Regex(">\d+,\d+ <IMG\salt\='.+'\sborder\=0\sheight\=8\shspace\=2\ssrc\=\/images\/.+\.gif\swidth\=7><\/td>\s*<\/tr>\s*<tr>\s*<td\s")
    Dim oRegExE2 As New System.Text.RegularExpressions.Regex(">\d+,\d+ <img\salt\='.+'\sborder\=""0""\sheight\=""8""\shspace\=""2""\ssrc\=""\/images\/.+\.gif""\swidth\=""7""><\/td>\s*<\/tr>\s*<tr>\s*<td\s")
    Dim oRegExInE2 As New System.Text.RegularExpressions.Regex("\d+,\d+")
    '#endregion var
    '#region ini
    iLang = iInteger(oContext.Request.QueryString("iLang"))
    Try
    sAnswer = System.Text.Encoding.UTF8.GetString(oWebClient.DownloadData("http://cbr.ru/"))
    tDate1 = oRegExInDate1.Match(oRegExDate1.Match(sAnswer).Value).Value
    tDate2 = oRegExInDate2.Match(oRegExDate2.Match(sAnswer).Value).Value
    dD1 = oRegExInD1.Match(oRegExD1.Match(sAnswer).Value).Value
    dD2 = oRegExInD2.Match(oRegExD2.Match(sAnswer).Value).Value
    dE1 = oRegExInE1.Match(oRegExE1.Match(sAnswer).Value).Value
    dE2 = oRegExInE2.Match(oRegExE2.Match(sAnswer).Value).Value
    Catch ex As Exception
    'sResponse = "/*" & ex.Message & "dD1=" & oRegExInD1.Match(oRegExD1.Match(sAnswer).Value).Value & "dD2=" & oRegExInD2.Match(oRegExD2.Match(sAnswer).Value).Value & "dE1=" & oRegExInE1.Match(oRegExE1.Match(sAnswer).Value).Value & "dE2=" & oRegExInE2.Match(oRegExE2.Match(sAnswer).Value).Value & "*/"
    sResponse = "/*0*/"
    b = True
    End Try
    '#endregion ini
    If b = False Then
    ....
    ...
    ...
    куча говна
    ...
    ...
    oContext.Response.Write(sResponse)
    End Sub
    REM Переопределяем свойство IsReusable.
    Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
    Get
    Return False 'запрещем кеширование этого обработчика в оперативной памяти вэб-сервера.
    End Get
    End Property
    End Class
    End Namespace

    А так мы получаем курс валют с локализацией.
    Рассчитывалось использовать на высоконагруженном портале. типо еллоупэйджеса.
    Через хэндлер.
    Максим Прохоров вас будет ещё долго радовать.

    ursus, 23 Апреля 2010

    Комментарии (4)