Преобразовать строку табличной функции T-SQL, разбитую на C # - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь преобразовать табличную функцию T-SQL в код на c #. Эта функция разбивает строку по разделителю. входной образец E, U7619

Есть ли способ преобразовать логику в код C #?

Я пробовал несколько вещей, но они слишком жалки, чтобы публиковать здесь. Любая помощь будет оценена.

ALTER FUNCTION [dbo].[SplitText]
    (@text VARCHAR(8000), 
     @delimiter CHAR(1))
RETURNS @words TABLE (objectid SMALLINT PRIMARY KEY, string VARCHAR(1000), optionalid INT)
AS
BEGIN
    DECLARE @pos smallint,
            @i smallint,
            @j smallint,
            @s varchar(255),
            @o int

    SET @pos = 1

    WHILE @pos <= LEN(@text)
    BEGIN
        SET @i = CHARINDEX(' ', @text, @pos)
        SET @j = CHARINDEX(@delimiter, @text, @pos)

        IF @i > 0 OR @j > 0
        BEGIN
            IF @i = 0 OR (@j > 0 AND @j < @i)
                SET @i = @j

            IF @i > @pos
            BEGIN
                -- @i now holds the earliest delimiter in the string
                SET @s = SUBSTRING(@text, @pos, @i - @pos)
                SET @o = 0
                IF CHARINDEX('|',@s,0) > 0
                    BEGIN
                        SET @o = SUBSTRING(@s,0,CHARINDEX('|',@s,0))
                        SET @s = SUBSTRING(@s,CHARINDEX('|',@s,0)+1,LEN(@s))

                    END

                IF NOT EXISTS (SELECT 1 FROM @words WHERE [string]=@s)
                BEGIN
                    INSERT INTO @words
                    VALUES (@pos, @s, @o)
                END
            END

            SET @pos = @i + 1
            WHILE @pos < LEN(@text) AND SUBSTRING(@text, @pos, 1) IN (' ', ',')
                SET @pos = @pos + 1
        END
        ELSE
        BEGIN
            SET @s = SUBSTRING(@text, @pos, LEN(@text) - @pos + 1)
            IF CHARINDEX('|',@s,0) > 0
            BEGIN
                SET @o = SUBSTRING(@s,0,CHARINDEX('|',@s,0))
                SET @s = SUBSTRING(@s,CHARINDEX('|',@s,0)+1,LEN(@s))

            END

            IF NOT EXISTS (SELECT 1 FROM @words WHERE [string]=@s)
            BEGIN
                INSERT INTO @words
                VALUES (@pos, @s ,@o)
            END

            SET @pos = LEN(@text) + 1
        END
    END

    RETURN
END

1 Ответ

1 голос
/ 05 июня 2019

Похоже, вы просто разбиваете данные на конвейере.Попробуйте это:

var testdata = "test|example|splitting|words";
var foo = testdata.Split(new string[] { "|" }, StringSplitOptions.None);
...