标签: vbscript

附加在vbscript/classicasp中的UTF-8文件 - 可以这样做吗?

我目前的知识:

如果您尝试在vbscript/asp land中编写文本文件,则有两种选择.

  1. Scripting.FileSystemObject
  2. ADODB.Stream对象

Scripting.FileSystemObject不支持utf8.它将用Ascii或Unicode编写(并为大多数字符浪费两个字节)

ADODB.Stream不支持追加(afaik).我无法弄清楚如何使ADODB.Stream对象实际打开一个文件,并在调用stream.Write时写入它.有一个SaveToFile函数,但它输出整个流.

如果您需要编写1GB文件,则必须先将整个1GB填入流中,然后才能将其写出来.

是否有一个特殊技巧可以让ADODB.Stream对象链接到磁盘上的文件?我试过stream.Open"URL = file:/// c:\ test.txt"但是这给了一个错误.

vbscript asp-classic

2
推荐指数
1
解决办法
6706
查看次数

VBScript RegExp不够贪婪

我正在尝试编写一个简单的SQL解析器来将sql语句分解为其基本部分.但是,我遇到嵌套查询的问题.一个例子说明最好的:

sql = "select * from Customers where id in (select customer_id from Orders where 1=1)"
Set re = New RegExp
re.IgnoreCase = True
re.Pattern = "^(.*)\swhere\s(.*)$"
re.Global = True
Set matches = re.Execute( sql )


If matches.count > 0 Then
    Set submatches = matches(0).Submatches
    where_part = Trim(submatches(1))
    everything_else = Trim(submatches(0)) 
End If 

Response.Write where_part & "<br>"
Response.Write everything_else & "<br>"
Run Code Online (Sandbox Code Playgroud)

在这里,我希望where_part包含"id in(从订单中选择customer_id,其中1 = 1)"和everything_else包含"select*from Customers".也就是说,我希望它尽可能地贪婪,第二个(.*)和第一个无私.换句话说,我希望everything_else不包含任何地方.

但是,我得到everything_else ="select*from customer in id in(select order_id from Orders"and where_part ="1 = 1)"

如何在不诉诸凌乱的非regexp字符串解析的情况下解决这个问题?

regex vbscript parsing regex-greedy

2
推荐指数
1
解决办法
2688
查看次数

"With"关键字的功能是什么?

鉴于下面的代码,"with"关键字有什么作用?我对它不太熟悉,我不确定它的用途.

Sub NotePage_Load()


With Request.Form
Run Code Online (Sandbox Code Playgroud)

谢谢凯文

vbscript asp-classic

2
推荐指数
1
解决办法
909
查看次数

正则表达式,用于从字符串中的引号中删除引号

假设我有一堆像这样的文本(简化示例,但你明白了):

INSERT stuff(a,b,c)     VALUES('1','a','1');
INSERT stuff(a,b,c)     VALUES('2','b','1');
INSERT stuff(a,b,c)     VALUES('3','c','2');
INSERT stuff(a,b,c)     VALUES('4','d','2');
INSERT stuff(a,b,c)     VALUES('5','e','3');
INSERT stuff(a,b,c)     VALUES('6','f','3');
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个正则表达式,它可以删除''每个数字周围的数字,但只留下数字.

这是捕获. 你不能指望所引用的数字每次都在同一个位置.

可能会出现这样的情况:

INSERT stuff(a,b,c)     VALUES('6','3','f');
Run Code Online (Sandbox Code Playgroud)

可以使用VBScript和RegExp对象的东西会很好.

regex t-sql vbscript

2
推荐指数
1
解决办法
1433
查看次数

在经典ASP中使用字典中的类

我通常做C#但继承了一个经典的ASP项目.

我已经定义了一个类:

    Class clsPayment    
        Public Name
    End Class

Set objPayment = New clsPayment
objPayment.Name = "StackOverflow payment"    
Run Code Online (Sandbox Code Playgroud)

还有一本字典:

Set colPayments = CreateObject("Scripting.Dictionary")
colPayments.Add 1, objPayment 
Run Code Online (Sandbox Code Playgroud)

稍后读取对象时,我无法调用公共字段:

For i = 0 to colPayments.Count - 1
    objPayment = colPayments.Item(i)
    Response.Write(objPayment.Name)
Next    
Run Code Online (Sandbox Code Playgroud)

这会在Response.Write行上引发错误:

Microsoft VBScript运行时错误"800a01a8"

所需对象: ''

我做错了什么?

vbscript dictionary asp-classic

2
推荐指数
1
解决办法
4640
查看次数

大型VBScript数组会产生"Out of Memory"错误

在Classic ASP(VBScript)中,如果我尝试创建一个大的2维数组,我会收到"Out of Memory"错误.例如,这个

DIM xxx : xxx = 10000
DIM yyy : yyy = 10000
REDIM aaa(xxx, yyy)
Response.End
Run Code Online (Sandbox Code Playgroud)

这个

Microsoft VBScript runtime error '800a0007' 

Out of memory
Run Code Online (Sandbox Code Playgroud)

他们可以使用的另一种数据结构是否可行,或其他一些解决方法?

(2010-01-27)更新:在进一步调查我正在研究的遗留代码时,数组很稀疏.换句话说,仅需要阵列占位符的一部分.像这样:

aaa(0, 0) = 1.23
aaa(101,12) = 1.57
aaa(3020,1200) = 2.58
etc.
Run Code Online (Sandbox Code Playgroud)

我想改变事物来存储这样的值:

aaa(count) = "xxx,yyy,val"
Run Code Online (Sandbox Code Playgroud)

然后使用Split()来获得给定x和y的val,但是每次我知道x和y时,这需要一个耗时的循环遍历数组.有更好的解决方案吗?

arrays vbscript out-of-memory multidimensional-array asp-classic

2
推荐指数
1
解决办法
4234
查看次数

在VBScript中创建多维关联数组

是否可以在VBScript中创建多维关联数组?

我正在尝试在VBScript中重新创建以下JScript代码:

names["teachers"] = ["Helen","Judy","Carol"];
names["students"] = ["George","John","Katie"];

For (var i=0; i<names["teachers"].length; i++) {

     Response.Write(names["teachers"][i]);

}
Run Code Online (Sandbox Code Playgroud)

我试过的VBScript:

dim names

SET names = CreateObject("Scripting.Dictionary")

names.Add "teachers", Array("Helen","Judy","Carol")
names.Add "students", Array("George","John","Katie")
Run Code Online (Sandbox Code Playgroud)

创建对象似乎没有错误,但我无法弄清楚如何在VBScript中循环遍历数组.

vbscript associative-array multidimensional-array

2
推荐指数
1
解决办法
1万
查看次数

使用VBScript读取CSV文件

我有一个包含4个字段的文件。

A,B,C,D
Run Code Online (Sandbox Code Playgroud)

我只想提取第四个字段并将其更改为“ E”

反正有做到这一点吗?

vbscript scripting

2
推荐指数
1
解决办法
3万
查看次数

映射网络驱动器并检查其在VBScript中的存在

我需要使用VBScript将网络驱动器映射到网络路径.直接从输入读取网络路径.我应该如何映射网络驱动器以及如何检查输入的网络路径是否已存在?

vbscript mapped-drive network-drive

2
推荐指数
1
解决办法
3万
查看次数

经典ASP /会话结束重定向

我想在用户会话到期时自动重定向到登录页面.

我一直在我的应用程序中每个页面顶部的包含文件中使用以下代码:

Session.Timeout = 60
Response.AddHeader "Refresh", CStr(CInt(Session.Timeout + 1) * 60)
Response.AddHeader "cache-control", "private"
Response.AddHeader "Pragma","No-Cache"
Response.Buffer = True
Response.Expires = 0
Response.ExpiresAbsolute = 0

If Session("accountID") = "" Then
    Response.Redirect("http://www.mydomain.com/")
End If
Run Code Online (Sandbox Code Playgroud)

这有效,但有一个非常轻微的错误.即使会话仍然存在,页面也会不时刷新,并且它似乎在60分钟之前刷新!

任何人都可以看到问题是什么,或者你可以建议一个不同的方法?

vbscript asp-classic

2
推荐指数
1
解决办法
1万
查看次数