четверг, 28 апреля 2011 г.

5-16 lines of useful JavaScript code


//GetShortName("Smith James Alex")="Smith J. A."
//GetShortName("Иванов Иван Петрович")="Иванов И. П."
//GetShortName("Иванов Иван")="Иванов И. ."
function GetShortName(strString){
    var strNew='';
    var arrStr;
    strString=strString+' ';
    arrStr=strString.split(' ');
    strNew=arrStr[0] + ' ' + arrStr[1].substring(0,1) + '. ' + arrStr[2].substring(0) + '.'
    return strNew;
}
function GetParam(strParameters, strParamNum, strDelimeter){
    //Get a parameter from parameter string: 'param1;param2;'
    //O. Halzov
    var strNew='';
    var arrStr;
    strParameters+=strDelimeter;
    arrStr=strParameters.split(strDelimeter);
    return arrStr[strParamNum-1];
}
function GetParseValue(strParameters, strParamName, strDelimeter) {
    //Get a parameter value from parameters string: 'param1=p1;param2=P2;'
    //O. Halzov
    var strNewParam = '';
    var intIdx = 0;
    intIdx = strParameters.indexOf(strParamName);
    if (intIdx >= 0) {
        strNewParam = strParameters.substring(intIdx, strParameters.length);
        strNewParam = GetParam(strNewParam, 1, strDelimeter) + '=';
        strNewParam = GetParam(strNewParam, 2, '=');
        if (strNewParam.length > 0) {
            strNewParam = Trim(strNewParam);
        }
        else strNewParam = '';
    }
    else strNewParam = '';
    return strNewParam;
}

понедельник, 11 апреля 2011 г.

T-SQL tips

Если нужен простой вариант хранения значений переменных в одной строке одного поля с разделителями без применения XML: MyDate=01.02.2010 ; Test=3; MyStringValue=This is a test!;
Лично мне это пригодилось при хранении нескольких настроек в одном поле, таким образом я избежал парсинга XML и не понадобилось бесконтрольно добавлять поля разного типа.
Создаем 2 функции [dbo].[fnSysGetParam] и [dbo].[fnSysGetParamValue].
Смотри пример в описании [dbo].[fnSysGetParamValue].

CREATE FUNCTION [dbo].[fnSysGetParam]
    (@nvcInput nvarchar(500),
    @intParamNum int,
    @nvcDelimeter nvarchar(3))
RETURNS nvarchar(255)
AS
BEGIN
DECLARE @intI int,
                @intJ int,
                @intK    int,
                @nvcP    nvarchar(100),
                @nvcReturn nvarchar(255)
SET @intI =0
SET @intJ =0
SET @intK    =0
SET @nvcP    =''
SET @nvcReturn =''

IF (@nvcInput = '') OR (@intParamNum<1) OR (@intParamNum>LEN(@nvcInput)) OR (@nvcDelimeter='')
    SET @nvcReturn = ''
ELSE
    BEGIN
        SET @intI=1
        WHILE @intI <= Len(@nvcInput)
        BEGIN
            IF UPPER(SUBSTRING(@nvcInput,@intI,LEN(@nvcDelimeter)))=UPPER(@nvcDelimeter)
            BEGIN
                IF @nvcDelimeter=' '
                BEGIN
                    SET @intK = @intI + 1
                    WHILE (@intK<=LEN(@nvcInput)) AND (UPPER(SUBSTRING(@nvcInput,@intK,LEN(@nvcDelimeter))) = UPPER(@nvcDelimeter))
                        SET @intK = @intK + 1
                    CONTINUE
                    SET @intI = @intK - 1
                END
                SET @intJ = @intJ + 1
        If @intJ = @intParamNum
            SET @nvcReturn = @nvcP
            END
        ELSE
        BEGIN
        IF (@intJ = @intParamNum - 1)
            BEGIN
            If @intJ = 0
                SET @nvcP = @nvcP + SUBSTRING(@nvcInput, @intI, 1)
            Else
                SET @nvcP = @nvcP + SUBSTRING(@nvcInput, @intI + Len(@nvcDelimeter) - 1, 1)
            END
        END
        SET @intI=@intI+1
        CONTINUE
        END

    END
    If @intJ = 0
                SET @nvcReturn = @nvcInput
RETURN @nvcReturn
END
GO
CREATE FUNCTION [dbo].[fnSysGetParamValue]
    (@nvcInput nvarchar(500),--строка оригинал
    @nvcParamName nvarchar(100),--название параметра в строке
    @nvcDelim nvarchar(1)) --символ конца параметра
RETURNS nvarchar(255)
AS
--Возвращает значение параметра из текстовой строки 'MyVar=10;'
--Пример: select dbo.fnSysGetParamValue('MyDate=01.02.2010 ;Test=3; MyFlag = 10','MyDate',';')
--Результат: 01.02.2010
BEGIN
    DECLARE @nvcNewParam nvarchar(100)
    SET @nvcNewParam = SUBSTRING(@nvcInput,CHARINDEX(@nvcParamName,@nvcInput),LEN(@nvcInput))
    IF PATINDEX('%'+@nvcParamName+'%',@nvcNewParam)>0
    BEGIN
        SET @nvcNewParam = dbo.fnSysGetParam(@nvcNewParam,1,@nvcDelim) + '='
        SET @nvcNewParam = RTRIM(LTRIM(dbo.fnSysGetParam(@nvcNewParam,2,'=')))
    END
    ELSE
        SET @nvcNewParam = ''

    RETURN ISNULL(@nvcNewParam,'')
END
GO