将此C#代码转换为经典ASP/VBScript?
我知道这听起来倒退了,但我必须将它从C#转换为经典ASP。我不知道任何VBScript,所以我需要帮助。将此C#代码转换为经典ASP/VBScript?
在我的C#代码中,它正在读取配置文件中的appkeys,解析它们,并使用循环执行过程。我不知道如何在VBScript中做字典和I/O的东西。有人可以帮助这个吗?
这些都是我想我将不得不为常数变量存储在.asp文件的密钥:
<add key="Output.Size" value="550" />
<add key="Output.Ext" value=".jpg" />
<add key="Output.Folder" value="thumbs" />
<add key="Suffix.LG" value="750" />
<add key="Suffix.TN" value="250" />
<add key="Suffix.TNL" value="175" />
<add key="Suffix.TNR" value="75" />
<add key="Supported" value=".jpeg,.jpg,.gif,.bmp,.tiff,.png" />
这是C#代码:
Generate generate = new Generate();
generate.Process(source, destination); //inputs will be relative URL paths
public class Generate
{
private const string OUTPUT_SIZE_KEY = "Output.Size";
private const string OUTPUT_EXT_KEY = "Output.Ext";
private const string SUFFIX_KEY = "Suffix.";
private const string SUPPORTED_KEY = "Supported";
private string[] supportedExt = null;
public Generate()
{
//GET ALL SUPPORTED FORMAT TYPES TO PREVENT PROCESSING ON UNSUPPORTED FILES
supportedExt = ConfigurationManager.AppSettings[SUPPORTED_KEY].ToLower().Split(',');
}
public void Process(string sourceDir, string destDir)
{
int thumbSize = Int32.Parse(ConfigurationManager.AppSettings[OUTPUT_SIZE_KEY]);
string thumbExt = ConfigurationManager.AppSettings[OUTPUT_EXT_KEY];
//COLLECT VALUES FOR RESIZING
Dictionary<string, int> resizeValues = new Dictionary<string, int>();
foreach (string item in ConfigurationManager.AppSettings.AllKeys)
{
if (item.StartsWith(SUFFIX_KEY))
{
resizeValues.Add(item.Substring(SUFFIX_KEY.Length), Int32.Parse(ConfigurationManager.AppSettings[item]));
}
}
//BEGIN GENERATING THUMBS
foreach (string item in Directory.GetFiles(sourceDir))
{
//VALIDATE IF FILE TYPE SUPPORTED
if (!supportedExt.Contains(Path.GetExtension(item.ToLower())))
continue;
string fileName = Path.GetFileNameWithoutExtension(item);
string outputFile = Path.Combine(destDir, fileName + thumbExt);
//RESIZE TO THUMB
Resize(item, outputFile, thumbSize); //DO NOT HAVE TO CONVERT "RESIZE"
//RESIZE TO DIFFERENT THUMBS
foreach (KeyValuePair<string, int> output in resizeValues)
{
string thumbSeq = Path.Combine(destDir, fileName + output.Key + thumbExt);
Resize(item, thumbSeq, output.Value); //DO NOT HAVE TO CONVERT "RESIZE"
}
}
}
UPDATE: 如下所示,我将其转换为VB以便于翻译。我似乎也必须重新思考。这是我在哪里,但我得到一个错误:
<html>
<head>
<title></title>
</head>
<body>
<%
'DECLARE VARIABLES
Dim outputSize
Dim outputExt
Dim outputSuffix()
Dim supported
Dim source
Dim destination
'INITIALIZE VALUES
outputSize = 550
outputExt = ".jpg"
outputSuffix(0) = "LG.750"
outputSuffix(1) = "TN.250"
outputSuffix(2) = "TNL.175"
outputSuffix(3) = "TNR.75"
supported = ".jpeg,.jpg,.gif,.bmp,.tiff,.png"
source = "catalog/upload"
destination = "catalog"
'CALL FUNCTION TO RESIZE THUMBNAILS
Dim generate
generate = New ThumbGenerator
generate.Process source, destination
'PROCESS TO RESIZE
class ThumbGenerator
Dim supportedExt
Public Sub Process(sourceDir, destDir)
Dim thumbSize
Dim thumbExt
thumbSize = outputSize
thumbExt = outputExt
supportedExt = supported.ToLower().Split(",")
'COLLECT VALUES FOR RESIZING
Dim resizeValues
resizeValues = Dictionary(String, Integer)()
For Each item As String In outputSuffix
Dim temp
temp = item.Split(".")
resizeValues.Add(temp(0), temp(1))
Next
'BEGIN GENERATING THUMBS
For Each item As String In Directory.GetFiles(sourceDir)
'VALIDATE IF FILE TYPE SUPPORTED
If Not supportedExt.Contains(Path.GetExtension(item.ToLower())) Then
Continue For
End If
Dim fileName
Dim outputFile
fileName = Path.GetFileNameWithoutExtension(item)
outputFile = Path.Combine(destDir, fileName + thumbExt)
'RESIZE TO THUMB
'Resize(item, outputFile, thumbSize)
'RESIZE TO DIFFERENT THUMBS
For Each output As KeyValuePair(Of String, Integer) In resizeValues
Dim thumbSeq As String = Path.Combine(destDir, fileName + output.Key + thumbExt)
'Resize(item, thumbSeq, output.Value)
Next
Next
End Sub
End Class
%>
</body>
</html>
这是我收到的错误:
Microsoft VBScript compilation error '800a03ea'
Syntax error
/sandbox/aspjpeg/Default.asp, line 45
resizeValues = Dictionary(String, Integer)()
----------------------------------^
(我不会将它转换为你,但...)
存在几个C#< - > VB.NET转换器,例如http://converter.telerik.com/
将其转换为VB.NET后,将其转换为经典ASP/VBScript可能会稍微容易一些。
你会想重新考虑你正在做的很多事情。 .Net不会逐行转换为vbscript,甚至不会按类/模块转换为类/模块。你必须看看ASP.Net实际上在做什么,并想出如何在VBScript中做到这一点。
vbscript的一个提示是,它不是用vbscript文件io来处理配置文件,而是通过在单独的文件中定义这些变量来处理配置数据,然后将其包含在其他地方,这样更容易处理配置数据。然后,您可以像使用其他变量一样使用该数据。
我把你的建议用于使用变量而不是配置文件。我想我最终可以将这些文件转移到单独的文件中,但我似乎仍需要重新思考一些基本的事情。我的文章反映了我的编辑。 – TruMan1 2010-09-05 13:24:35
您不能Dim一个变量,然后在vbscript的同一行上设置它的值。
昏暗outputSize作为整数 outputSize = 550
,并且不使用 “” 周围的整数。
我更新了上面的代码。我找不到一种方法来使用字典或类似的东西。 – TruMan1 2010-09-05 14:28:41
查看本网站http://www.devguru.com/technologies/vbscript/quickref/dictionary.html。 – 2010-09-06 08:16:30
您可以昏暗的变量,并通过
dim myVar : myVar = 4711
或
' this will create a "dictionary"
dim resizeValues : set resizeValues = server.createobject("scripting.dictionary")
是否需要生活在一个过去的时代分配valuy?或者仅仅是从过去的时代被召唤出来?如果后者是答案,你是否考虑过将代码移动到自己的程序集中,并使程序集COM可见,然后从所说的旧时代访问它。
使用常量关键字来定义常量变量。例如:
Dim outputSize, outputExt
outputSize = 550
outputExt = ".jpg"
可以
Const outputSize = 550, outputExt = ".jpg"
使用FSO对象来处理文件和文件夹。例如:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(sourceDir)
Set files = folder.Files
谢谢,我转换它,但它仍然似乎远离ASP。我已更新我的帖子。 – TruMan1 2010-09-05 13:23:28