2013-07-19 27 views
5

Với mảng sau đây là một ví dụ ...xóa một phần tử từ một mảng trong ASP cổ điển

arr(0)(0) = 3 
arr(0)(1) = name 
arr(0)(2) = address 
arr(1)(0) = 7 
arr(1)(1) = name 
arr(1)(2) = address 
arr(2)(0) = 14 
arr(2)(1) = name 
arr(2)(2) = address 

tôi cần phải xóa các yếu tố giữa (id = 7) từ mảng. Tôi hiểu rằng tôi cần phải lặp qua mảng và di chuyển mỗi bản ghi mà không được xóa thành một mảng mới. Tôi đã cố gắng như thế này ...

Dim newArr,i 
Redim newArr(Ubound(arr)) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i) = arr(i) 
    End if 
Next 

Khi gỡ lỗi này tôi có thể thấy câu lệnh if làm việc vì vậy tôi chỉ biết 2 phần tử được sao chép nhưng newArr trống vào cuối phần này. Tôi đang thiếu gì. Tôi là một coder PHP mà là mới để cổ điển asp và Im được sử dụng để có chức năng mảng mà làm cho loại điều không cần thiết. Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn bạn.

+0

Tôi biết về scripting.dictionary, tuy nhiên, mảng được đề cập được sử dụng trong một trang web rất lớn và tôi không có quyền truy cập để thay đổi nó vào thời điểm này. –

+1

Không thực sự là một giải pháp nhưng: đây không phải là một vấn đề asp. ASP chỉ là một container cho ngôn ngữ kịch bản, trong trường hợp VBscript của bạn. Do đó, vấn đề của bạn là một vấn đề VBScript. Kiến thức này có thể giúp bạn tìm kiếm google thành công hơn. – Jeff

Trả lời

3

Bạn không cần mảng mới, bạn chỉ có thể chỉ định lại các mục và "cắt" mảng:

Const removalIndex = 1 
For x=removalIndex To UBound(arr)-1 
    arr(x) = arr(x + 1) 
Next 
ReDim Preserve arr(UBound(arr) - 1) 

Mã này sẽ xóa mục mảng tại chỉ mục 1 khỏi mảng chính. Nếu bạn không biết trước chỉ mục của mục cần xóa, bạn có thể dễ dàng tìm thấy nó bằng một vòng lặp đơn giản trên mảng.

6

Thay vì sử dụng mảng, bạn có thể dùng thử Scripting.Dictionary.

Nó linh hoạt hơn nhiều, và có, trong số những phương pháp khác Remove.

+0

Thật không may tôi không có quyền truy cập vào việc tạo mảng. Đây là một trang web rất lớn và mảng được đề cập được sử dụng xuyên suốt. Không thể vào thời điểm này để tránh xa nó. –

4

Tôi khuyên bạn nên sử dụng Scripting.Dictionary và sử dụng nó làm Danh sách/bộ sưu tập để thay thế, vì nó cho phép chèn và xóa. Xem tại đây: Lists in VBScript

0

Tôi không biết câu trả lời dứt khoát, nhưng nếu tôi bị đâm trong bóng tối, tôi cho rằng vì mảng là hai chiều có lẽ bạn phải đề cập rõ ràng theo cách đó ?

Dim newArr,i 
Redim newArr(Ubound(arr),3) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i)(0) = arr(i)(0) 
     newArr(i)(1) = arr(i)(1) 
     newArr(i)(2) = arr(i)(2) 
    End if 
Next 
0

Tôi thấy một số vấn đề cú pháp VBScript. Đầu tiên:

arr(0)(0) = 3 'ERROR: Subscript out of range 
arr(0, 0) = 3 'CORRECT 

Tiếp theo:

ReDim newArr(Ubound(arr)) 'this is 1 dimensional array 
newArr(0) = arr(0)   'this will NOT work 
newArr(0) = arr(0, 0)  'this will work 

Và cuối cùng: tại sao bạn chuyển đổi sang String và sau đó so sánh nó với một Integer với:

(CStr(arr(i)(0)) <> 7) 
Các vấn đề liên quan