qq_36257233 2017-06-14 08:49 采纳率: 77.8%
浏览 779
已采纳

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>
  • 写回答

2条回答

  • Go 旅城通票 2017-06-14 10:18
    关注

    这句先删除,我这里测试忘记删了,你没删除会出错,除非你有这个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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧