roker002
Commander
- Registriert
- Dez. 2007
- Beiträge
- 2.075
Ich brauche die Position des Zeilenumbruchs an der letzte Stelle. In C# ist es einfach, da tippt man "".LastIndexOf("\r\n"). Aber in MS SQL ist es anders, da es keine LASTINDEXOF procedure gibt. Also muss ich zuerst den text umdrehen und diesen dann nach charindex absuchen.
Das Problem ist, die umbruchzeichen lassen sich nicht alle beseitigen! Ich bekomme beim CHAR(10)+CHAR(13) den CHAR(13) doch angezeigt!
Kann da jemand helfen?
Das Problem ist, die umbruchzeichen lassen sich nicht alle beseitigen! Ich bekomme beim CHAR(10)+CHAR(13) den CHAR(13) doch angezeigt!
Kann da jemand helfen?
Code:
declare @from int,
@string nvarchar(max),
@maxlen int,
@current nvarchar(max),
@creversed nvarchar(max),
@index_f int,
@index_l int,
@index int, -- index aus dem String @index_on
@string_l nvarchar(max),
@len int,
@counter int
set @string = '1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234' + CHAR(13) + CHAR(10) +
'567890 1234567890 1234567890 ' + CHAR(10) + CHAR(13) + '1234567890 1234567890 1234567890 12345678' +
'abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnop' + CHAR(10) +
'qrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcde' + CHAR(13) +
'fghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstu'
set @from = 1
set @maxlen = 60
set @counter = 1
--set @ret = CHAR(10) + CHAR(13)
--print left(@string, len(@string) - charindex(@lf, reverse(@string)))
while @from <= LEN(@string)
begin
set @index = 0
set @current = substring(@string, @from, @maxlen)
set @creversed = REVERSE(@current)
/*print @current
print @creversed
print @counter
print ''*/
set @counter = @counter + 1
---Einmal vorne und einmal hinten die ergebnisse vergleichen um zu entscheiden, wo der String geschnitten wird
set @index_l = CHARINDEX(CHAR(10) + CHAR(13), @creversed) --suche nach \r\n
set @index_f = CHARINDEX(CHAR(13) + CHAR(10), @current) --suche nach \r\n
set @len = 2
if(@index_l > 0) begin set @index_l = LEN(@current) - (@index_l + 1); end
if(@index_f >= @index_l)
begin set @index = @index_l end
else begin set @index = @index_f end
if (@index = 0)
begin
set @index_l = CHARINDEX(CHAR(13) + CHAR(10), @creversed) --suche nach \n\r (eigentlich sollte sowas nicht geben aber was solls.
set @index_f = CHARINDEX(CHAR(10) + CHAR(13), @current)
set @len = 2
if(@index_l > 0) begin set @index_l = LEN(@current) - (@index_l + 1); end -- damit man ja auch mit char(10) das ganze angefangen wird.
if(@index_f >= @index_l)
begin set @index = @index_l end
else begin set @index = @index_f end
if(@index = 0)
begin
set @index_l = CHARINDEX(CHAR(13), @creversed) --suche nach \r
set @index_f = charindex(CHAR(13), @current)
set @len = 1
if(@index_l > 0) begin set @index_l = LEN(@current) - @index_l; end
if(@index_f > @index_l)
begin set @index = @index_l end
else begin set @index = @index_f end
if(@index = 0)
begin
set @index_l = CHARINDEX(CHAR(10), @creversed)--suche nach \n
set @index_f = charindex(CHAR(10), @current)
set @len = 1
if(@index_l > 0) begin set @index_l = LEN(@current) - @index_l; end
if(@index_f > @index_l)
begin set @index = @index_l end
else begin set @index = @index_f end
if(@index = 0)
begin
set @index = LEN(@current) - CHARINDEX(' ', @creversed) --suche nach Leeren Zeichen
set @len = 1
end
end
end
end
if(@index = 0)
begin
set @string_l = @current
set @len = 0;
--print CHAR(10) + 'Index 0'
end
else
begin
--print CHAR(10) + 'Index ' + cast(@index as varchar)
set @string_l = left(@current, @index)
end
--print 'FROM : ' + cast(@from as varchar) + ' INDEX : ' + cast(@index as varchar) + ' String L : ' + cast(len(@string_l) as varchar)
set @from += LEN(@string_l) + @len --(@maxlen - @index)
--print 'FROM : ' + cast(@from as varchar) + ' INDEX : ' + cast(@index as varchar) + ' String L : ' + cast(len(@string_l) as varchar)
--print @string_l
print replace(replace(replace(replace(@string_l, CHAR(13) + CHAR(10), 'CHAR(13) + CHAR(10)'), CHAR(10) + CHAR(13), 'CHAR(10) + CHAR(13)'), CHAR(13), 'CHAR(13)'), CHAR(10), 'CHAR(10)')
set @string_l = ''
end