asp 执行出错啊。解码, showbo大神千呼万应你快来啊。


1.txt 45678 | 12-23-23-123-
2.txt的45678在最后一行。
下标越界: '[number: 0]' 
如果在2.txt里面查到不到1.txt的scode代码,应该在1.txt里面读取一行新的scode代码,然后再2.txt里面继续查找啊。。。


<%@LANGUAGE="VBScript" CODEPAGE="65001"%>
<!--#include file="aspJSON1.17.asp"-->
<meta charset="utf-8" />
<%
Function EnCodeY(sText,sCode)'当参数传入
  Dim arrCode(),i,flag,strResult

  arrData = split(sText, "-")

  cntData = UBOUND(arrData) - 1
  cntCode = Len(sCode) - 1

  Redim arrCode(cntCode)

  For i = 0  To cntCode
    arrCode(i) = Mid(sCode, i + 1, 1)
  Next

  flag = 0
  strResult = ""
  For i = 0 To cntData
    strResult = strResult & CHR(Cint(arrData(i)) XOR ASC(arrCode(flag)))
    IF flag = cntCode Then
      flag = 0
    Else
      flag = flag + 1
    End IF
  Next

  EnCodeY = strResult
End Function

function readText(path,charset)'读文件
  set ts=server.CreateObject("adodb.stream")
  ts.charset=charset'内容编码
  ts.mode=3'读写模式
  ts.type=2'文本模式
  ts.open
  ts.LoadFromFile path
  readText=ts.readtext
  ts.close:set ts=nothing
end function

function writeText(path,charset,text)'写文件
  set ts=server.CreateObject("adodb.stream")
  ts.mode=3'写写模式
  ts.type=2'文本模式
  ts.open
  ts.charset=charset'内容编码
  ts.WriteText text,1
  ts.SaveToFile path,2
  ts.close:set ts=nothing
end function
function findCode(v,arr)'查找开头数字一样的code值
  dim i,l,arrCode
  l=ubound(arr)
  for i=0 to l
    arrCode=split(arr(i)," | ")
    if arrCode(0)=v then
      findCode=arrCode(1)
      exit function
    end if
  next
end function

function doDecode(path1,pathcode,pathrst)'path1:要解码的文件物理路径 pathcode:code文件物理路径  pathrst:解码保存文件物理路径
  dim arrA,arrCode,l,i,s,scode,arr
    '============
  arrA=split(replace(readText(path1,"gb2312"),chr(13),""),chr(10))'注意如果要解密的字符不存在1.txt里面注意修改这里,下面的code同理

  arrCode=split(replace(readText(pathcode,"gb2312"),chr(13),""),chr(10))
  s=""
  l=ubound(arrA)
  for i=0 to l
    arr=split(arrA(i)," | ")
    scode=findCode(arr(0),arrCode)
    if scode="" then
      response.Write arr(0)&"找不到code代码<br>"
    else
      if s<>"" then s=s&chr(13)&chr(10)
      s=s&arr(0)&" | "&EnCodeY(arr(1),scode)'如果不需要前缀id,去掉arr(0)&" | "&
    end if
  next
  writeText pathrst,"gb2312",s
end function

doDecode server.MapPath("1.txt"),server.MapPath("2.txt"),server.MapPath("3.txt")
%>
解码完毕,<a href='3.txt' target='_blank'>点击查看解码文件</a>

这句先删除,我这里测试忘记删了,你没删除会出错,除非你有这个asp文件

 <!--#include file="aspJSON1.17.asp"-->

越界在哪行?你的格式要注意波,一定要是和你上个问题说的一样

要解码的内容为下面这种,不能出现空行

 73628 | 89-69-10-94-4-1-6-76-91-5-87-95-85-
73628 | 89-69-10-94-4-1-6-76-91-5-87-95-85-
。。。。

scode文件也不能出现空行,每行内容必须存在“空格|空格”内容,不存在split会出错越界


这个hi来捣乱的 | 啊啊啊
73628 | hw9s535xv4elaje
。。。。

下面是改过的代码,防止查找findCode,doDecode越界的

 <%@LANGUAGE="VBScript" CODEPAGE="65001"%>
<meta charset="utf-8" />
<%
Function EnCodeY(sText,sCode)'当参数传入
  Dim arrCode(),i,flag,strResult

  arrData = split(sText, "-")

  cntData = UBOUND(arrData) - 1
  cntCode = Len(sCode) - 1

  Redim arrCode(cntCode)

  For i = 0  To cntCode
    arrCode(i) = Mid(sCode, i + 1, 1)
  Next

  flag = 0
  strResult = ""
  For i = 0 To cntData
    strResult = strResult & CHR(Cint(arrData(i)) XOR ASC(arrCode(flag)))
    IF flag = cntCode Then
      flag = 0
    Else
      flag = flag + 1
    End IF
  Next

  EnCodeY = strResult
End Function

function readText(path,charset)'读文件
  set ts=server.CreateObject("adodb.stream")
  ts.charset=charset'内容编码
  ts.mode=3'读写模式
  ts.type=2'文本模式
  ts.open
  ts.LoadFromFile path
  readText=ts.readtext
  ts.close:set ts=nothing
end function

function writeText(path,charset,text)'写文件
  set ts=server.CreateObject("adodb.stream")
  ts.mode=3'写写模式
  ts.type=2'文本模式
  ts.open
  ts.charset=charset'内容编码
  ts.WriteText text,1
  ts.SaveToFile path,2
  ts.close:set ts=nothing
end function
function findCode(v,arr)'查找开头数字一样的code值
  dim i,l,arrCode
  l=ubound(arr)
  for i=0 to l
    if arr(i)<>"" and instr(arr(i)," | "))<>0 then'非空行并且包含 |
      arrCode=split(arr(i)," | ")
      if arrCode(0)=v then
        findCode=arrCode(1)
        exit function
      end if
    end if
  next
end function

function doDecode(path1,pathcode,pathrst)'path1:要解码的文件物理路径 pathcode:code文件物理路径  pathrst:解码保存文件物理路径
  dim arrA,arrCode,l,i,s,scode,arr
  arrA=split(replace(readText(path1,"gb2312"),chr(13),""),chr(10))
  arrCode=split(replace(readText(pathcode,"gb2312"),chr(13),""),chr(10))
  s=""
  l=ubound(arrA)
  for i=0 to l
    if trim(arrA(i))<>"" and instr(arrA(i)," | "))<>0 then'非空行并且包含 |
      arr=split(arrA(i)," | ")

      scode=findCode(arr(0),arrCode)
      if scode="" then
        response.Write arr(0)&"找不到code代码<br>"
      else
        if s<>"" then s=s&chr(13)&chr(10)
        s=s&arr(0)&" | "&EnCodeY(arr(1),scode)'如果不需要前缀id,去掉arr(0)&" | "&
      end if
    else
        response.Write arrA(i)&"为空或者没有分隔符号“ | ”<br>"
    end if
  next
  writeText pathrst,"gb2312",s
end function

doDecode server.MapPath("1.txt"),server.MapPath("2.txt"),server.MapPath("3.txt")
%>
解码完毕,<a href='3.txt' target='_blank'>点击查看解码文件</a>

Microsoft VBScript 编译器错误 错误 '800a03f9'

缺少 'Then'

/s/s.asp,行 57

if arr(i)<>"" and instr(arr(i)," | "))<>0 then'?в? |

大哥。又变这样了?我里面的内容 就是这样的。没有多余的空格。73628 | 89-69-10- 这是1.txt 2.txt是1666355 | d5lgn9die4ems2m

连个多余的空格都没有,下一行只是scode和数字不一样!!!。
73628 | 89-69-10-94-4-1-6-76-91-5-87-95-85-
73628 | 89-69-10-94-4-1-6-76-91-5-87-95-85-
。。。。