【问题标题】:How to convert syntax from Foxpro to SQL Server如何将 Foxpro 的语法转换为 SQL Server
【发布时间】:2019-01-01 11:24:08
【问题描述】:
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 中使用评论。

【问题讨论】:

  • 不要转换代码(这需要熟悉这两种产品的人的帮助),为什么不发布示例数据和所需的结果,以便我们这些不熟悉 foxpro也可以帮忙吗?
  • 我不明白这一行 * ? #'+w_chr+'='+CHR(w_asc)+''+STR(ASC(w_chr))+'>'+STR(ASC(w_chr)+1)+''+CHR( ASC(w_chr))+'>'+CHR(ASC(w_chr)+1)
  • 我不知道。我很擅长 SQL Server,从未使用过 foxpro。

标签: sql sql-server tsql visual-foxpro foxpro


【解决方案1】:

这是等效的 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 中的 ?)是调试器语句

【讨论】:

  • 你很亲密。它将是 32 而不是 31 和 varbinary 而不是 varchar。
  • 为你修正了错字
  • 谢谢,但它仍然应该是二进制的。
【解决方案2】:

这是一段写得很糟糕的 VFP 代码。 * 将该行标记为注释,基本上它将字符串中的所有字符替换为 ASCII 图表中的下一个字符,除了 char 32 (SPACE)。不过,这不是您可以在 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2015-10-18
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多