Как конвертировать синтаксис из Foxpro в SQL Server - PullRequest
0 голосов
/ 01 января 2019
LOCAL  in_txt
in_txt='mohammad'
txt_len=LEN(in_txt)
rev_txt=''

FOR ii=1 TO txt_len
w_chr=SUBSTR(in_txt,ii,1)
w_asc=IIF(ASC(w_chr)=32,32,ASC(w_chr)+1)
*    ?'    #'+w_chr+'='+CHR(w_asc)+'*'+STR(ASC(w_chr))+'>'+STR(ASC(w_chr)+1)+'*'+CHR(ASC(w_chr))+'>'+CHR(ASC(w_chr)+1)


rev_txt=rev_txt+ CHR(w_asc)
ENDFOR 

return rev_txt

Я понимаю, что решить мою проблему * персонаж использует комментарий в foxpro.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Это плохо написанный фрагмент кода VFP.* помечает строку как комментарий, и в основном она заменяет все символы в строке, кроме символа 32 (ПРОБЕЛ), на следующий в диаграмме ASCII.Это не то, что вы могли бы легко конвертировать в MS SQL, потому что в VFP строка может содержать любой символ, включая char (0).Предполагая, что у вас нет char 0:

Declare @in_txt varbinary(MAX);
DECLARE @rev_txt varbinary(MAX);
set @in_txt = CAST('mohammad' AS VARBINARY(MAX));
declare @i int;
declare @w_char int;
set @i = 1;
SET @rev_txt = CAST('' AS VARBINARY(MAX));

WHILE @i <= Len(@in_txt)
Begin
   set @w_char = ASCII(SUBSTRING(@in_txt,@i,1));
   SET @rev_txt = @rev_txt + 
    CAST(@w_char + case when @w_char = 32 then 0 else 1 end AS BINARY(1));
   SET @i = @i +1;
END
SELECT @rev_txt;
0 голосов
/ 01 января 2019

Вот эквивалент SQL

DECLARE @in_txt varchar(100)
DECLARE @txt_Len int
DECLARE @rev_txt varchar(100)=''
DECLARE @i int=0
DECLARE @w_chr char(1)
DECLARE @w_asc int

SET @in_txt='mohammad'
SET @txt_len=LEN(@in_txt)

WHILE @i < @txt_len
BEGIN
    SET @i = @i + 1
    SET @w_chr=SUBSTRING(@in_txt,@i,1)
    SET @w_asc = ASCII(@w_chr)
    IF @w_asc <> 32 SET @w_asc=@w_asc+1
    PRINT '#'+@w_chr+'='+CHAR(@w_asc)+'*'+STR(ASCII(@w_chr))+'>'+STR(ASCII(@w_chr)+1)+'*'+CHAR(ASCII(@w_chr))+'>'+CHAR(ASCII(@w_chr)+1)
    SET @rev_txt = @rev_txt + CHAR(@w_asc)

END

PRINT @rev_Txt

Кажется, что это очень простое шифрование текста.Оператор Print в цикле (который эквивалентен? В Foxpro) является оператором отладчика

...