views:

159

answers:

5

I know this sounds backwards, but I have to convert this from C# to Classic ASP. I don't know any VBScript so I need help.

In my C# code, it is reading appkeys in the config file, parsing them, and using loops to perform a process. I don't know how to do dictionaries and I/O stuff in VBScript. Can someone please help with this?

These are the keys which I guess I would have to store as constant variables in the .asp file:

<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" />

This is the C# code:

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: As suggested below, I converted to a VB for easier translation. It seems I have to rethink things as well. This is where I am but am getting an error:

<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>

This is the error I am getting:

Microsoft VBScript compilation error '800a03ea' 

Syntax error 

/sandbox/aspjpeg/Default.asp, line 45 

resizeValues = Dictionary(String, Integer)()
----------------------------------^
A: 

(I won't convert it for you but...)

There exist several C# <-> VB.NET converters, e.g. http://converter.telerik.com/

Once you have converted this to VB.NET it might be little bit easier to convert it to classic ASP / VBScript.

M4N
Thanks, I converted it but it still seems far from ASP. I have updated my post.
TruMan1
+2  A: 

You'll want to rethink a lot of what you're doing. The .Net won't translate to vbscript line by line, or even class/module by class/module. You'll have to look at what the ASP.Net is actually doing and figure out how to do that in vbscript.

One tip for vbscript is that rather than mess with vbscript file io to handle the config file, I found it much easier to handle configuation data by defining those variables in a separate file that will then be included in other other places. Then you can use that data just like you would other variables.

Joel Coehoorn
I took your advise in using variables instead of a config file. I think I can move these to a separate file eventually, but I seems I still need to rethink some fundamental things. My post reflects my edits.
TruMan1
+1  A: 

You can not Dim a variable and then set the value to it on the same line in vbscript.

Dim outputSize As Integer outputSize = 550

And don't use "" around an integer.

Ken Thai
I updated my code above. I can't find a way to use a dictionary or something similar though.
TruMan1
Check out this website http://www.devguru.com/technologies/vbscript/quickref/dictionary.html .
Ken Thai
A: 

you CAN dim a variable and assign a valuy by

dim myVar : myVar = 4711

or

' this will create a "dictionary"

dim resizeValues : set resizeValues = server.createobject("scripting.dictionary")

ulluoink
A: 

Does it need to live in a bygone era? Or merely be called from a bygone era? If the latter is the answer, have you considered moving the code to its own assembly and making the assembly COM visible then just accessing it from said bygone era.

Wyatt Barnett