quigleyryan
asked on
replace('{here it is' , '{', '^') doesn't work
i'm trying to do a replacement function and it works for everything but { characters
so i thought i would fake it out and replace the { and } with ^
but i get an incorrect syntax
where @originalcode is the string
Set @OriginalCode = Replace(@OriginalCode, '{', '^^')
Set @OriginalCode = Replace(@OriginalCode, '}', '^')
so i thought i would fake it out and replace the { and } with ^
but i get an incorrect syntax
where @originalcode is the string
Set @OriginalCode = Replace(@OriginalCode, '{', '^^')
Set @OriginalCode = Replace(@OriginalCode, '}', '^')
Ultimately, what is your goal? Is { some soft of a delimiter?
ASKER
its a parsing routine - i have a lot of "junk" and print specific characters/instructions in my data - i need to replace the print specific stuff with html code...
so initially i had a function (which works with everything but { brackets) that goes and does the replaces based on a set of compares
so if the data had as @originalcode = '{\this way now }' my code would make it <sup>This way now </sup>
so initially i had a function (which works with everything but { brackets) that goes and does the replaces based on a set of compares
so if the data had as @originalcode = '{\this way now }' my code would make it <sup>This way now </sup>
I think the problem exists in that function then. With only seeing a small section of the function, it's hard to say. All I know is a search and replace on { and } are valid.
ASKER
Here's the whole thing...
well this is what i would rather do --
i have this scalar-valued function that is called by a stored procedure with
this command: SET @OriginalCode = dbo.ReplaceTokenPair(@Orig inalCode, '{b',
'}', '<b>', '</b>')
If i have @originalcode = 'testing {b this is a test }' which should give me
testing <b> this is a test </b> but instead it goes into never never land
ALTER FUNCTION [dbo].[ReplaceTokenPair]
(
@OriginalCode nvarchar(4000),
@StartToken nvarchar(100),
@EndToken nvarchar(100),
@StartHTML nvarchar(100),
@EndHTML nvarchar(100)
)
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @Before nvarchar(4000), @Between nvarchar(4000), @After
nvarchar(4000)
DECLARE @x int, @y int, @z int
SET @x = 1
SET @y = 1
SET @z = 1
WHILE @y > 0 AND @z > 0
BEGIN
SET @y = CHARINDEX(@StartToken, @OriginalCode, @x)
SET @z = CHARINDEX(@EndToken, @OriginalCode, @y + LEN(@StartToken) + 1)
IF @y > 0
BEGIN
SET @Before = SUBSTRING(@OriginalCode, 1, @y - 1)
SET @Between = SUBSTRING(@OriginalCode, @y + LEN(@StartToken), @z - @y -
LEN(@EndToken) - 1)
SET @After = SUBSTRING(@OriginalCode, @z + LEN(@EndToken),
LEN(@OriginalCode))
SET @OriginalCode = @Before + @StartHTML + @Between + @EndHTML + @After
END
SET @x = LEN(@OriginalCode) - (LEN(@Before) + LEN(@StartHTML) +
LEN(@Between) + LEN(@EndHTML))
SET @x = 0
END
well this is what i would rather do --
i have this scalar-valued function that is called by a stored procedure with
this command: SET @OriginalCode = dbo.ReplaceTokenPair(@Orig
'}', '<b>', '</b>')
If i have @originalcode = 'testing {b this is a test }' which should give me
testing <b> this is a test </b> but instead it goes into never never land
ALTER FUNCTION [dbo].[ReplaceTokenPair]
(
@OriginalCode nvarchar(4000),
@StartToken nvarchar(100),
@EndToken nvarchar(100),
@StartHTML nvarchar(100),
@EndHTML nvarchar(100)
)
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @Before nvarchar(4000), @Between nvarchar(4000), @After
nvarchar(4000)
DECLARE @x int, @y int, @z int
SET @x = 1
SET @y = 1
SET @z = 1
WHILE @y > 0 AND @z > 0
BEGIN
SET @y = CHARINDEX(@StartToken, @OriginalCode, @x)
SET @z = CHARINDEX(@EndToken, @OriginalCode, @y + LEN(@StartToken) + 1)
IF @y > 0
BEGIN
SET @Before = SUBSTRING(@OriginalCode, 1, @y - 1)
SET @Between = SUBSTRING(@OriginalCode, @y + LEN(@StartToken), @z - @y -
LEN(@EndToken) - 1)
SET @After = SUBSTRING(@OriginalCode, @z + LEN(@EndToken),
LEN(@OriginalCode))
SET @OriginalCode = @Before + @StartHTML + @Between + @EndHTML + @After
END
SET @x = LEN(@OriginalCode) - (LEN(@Before) + LEN(@StartHTML) +
LEN(@Between) + LEN(@EndHTML))
SET @x = 0
END
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Actually... that one only works for one } right now.... give me a few.
I have a potential problem to propose to you. If you use the same terminator for multiple tags, there is no reliable way to parse it.
So if you have:
{b{ihello}my name is} jon
There is nothing to say that the first } goes with {b or {i. My process that I'm working on now will find all terminators '}' and not just the first one. So it would also not work well with
{bhello}my name is} jon
you would get
<b>hello</b>my name is</b> jon
So if you have:
{b{ihello}my name is} jon
There is nothing to say that the first } goes with {b or {i. My process that I'm working on now will find all terminators '}' and not just the first one. So it would also not work well with
{bhello}my name is} jon
you would get
<b>hello</b>my name is</b> jon
ASKER
Brandon
thank you - iright now the data has print specific characters in it - and luckily as we go through and parse the strings we don't have a scenario of {b{ihello}my name is}
but i guess i could...
thank you - iright now the data has print specific characters in it - and luckily as we go through and parse the strings we don't have a scenario of {b{ihello}my name is}
but i guess i could...
Open in new window