按你的修改,现在提示 Microsoft VBScript 运行时错误 错误 '800a0009' 下标越界: '13' /nongli.asp,行 314
时间: 2024-11-04 18:17:21 浏览: 33
从您提供的错误信息来看,问题是由于数组索引越界引起的。具体来说,在 `NongliData` 数组中访问了不存在的索引 `13`。这通常发生在循环或条件判断中对数组长度的控制不当。
在您的 ASP 代码中,`NongliData` 数组的长度为 100(即 `NongliData(0)` 到 `NongliData(99)`),但某些地方可能尝试访问了超出这个范围的索引。
以下是一些可能的解决方案:
1. **检查循环边界**:
确保在循环中不会超过数组的最大索引。例如,在 `Do...Loop` 循环中,需要确保 `m` 不会超过 99。
2. **添加边界检查**:
在访问数组之前,添加边界检查以防止越界访问。
以下是修改后的代码片段,增加了边界检查:
```asp
<%
' 计算农历天干、地支、月、日
isEnd = 0
m = 0
Do
If (NongliData(m) < 4095) Then
k = 11
Else
k = 12
End If
n = k
Do
If (n < 0) Then
Exit Do
End If
' 获取NongliData(m)的第n个二进制位的值
bit = NongliData(m)
For i = 1 To n Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
If (TheDate <= 29 + bit) Then
isEnd = 1
Exit Do
End If
TheDate = TheDate - 29 - bit
n = n - 1
Loop
If (isEnd = 1) Then
Exit Do
End If
m = m + 1
' 添加边界检查
If (m >= 100) Then
Response.Write("Error: Index out of bounds for NongliData array.")
Exit Do
End If
Loop
curYear = 1921 + m
curMonth = k - n + 1
curDay = TheDate
If (k = 12) Then
If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
curMonth = 1 - curMonth
ElseIf (curMonth > (Int(NongliData(m) / 65536) + 1)) Then
curMonth = curMonth - 1
End If
End If
' 生成农历天干、地支、属相 ==> NongliStr
NongliStr = "农历" & TianGan(((curYear - 4) Mod 60) Mod 10) & DiZhi(((curYear - 4) Mod 60) Mod 12) & "年"
NongliStr = NongliStr & "(" & ShuXiang(((curYear - 4) Mod 60) Mod 12) & ")"
' 生成农历月、日 ==> NongliDayStr
If (curMonth < 1) Then
NongliDayStr = "闰" & MonName(-1 * curMonth)
Else
NongliDayStr = MonName(curMonth)
End If
NongliDayStr = NongliDayStr & "月" & DayName(curDay)
%>
```
在这个修改后的代码中,我们在 `Do...Loop` 循环中添加了一个边界检查,确保 `m` 不会超过 `99`。这样可以避免因数组越界而引发的运行时错误。希望这能解决您的问题。如果还有其他问题,请随时告知。
阅读全文