Преобразовать этот код C # в классический ASP / VBScript? - PullRequest
1 голос
/ 05 сентября 2010

Я знаю, это звучит задом наперед, но я должен преобразовать это из C # в Classic ASP. Я не знаю VBScript, поэтому мне нужна помощь.

В моем C #-коде он читает appkeys в файле конфигурации, анализирует их и использует циклы для выполнения процесса. Я не знаю, как делать словари и ввод-вывод в VBScript. Может кто-нибудь помочь с этим?

Это ключи, которые, я думаю, мне нужно было бы хранить в виде константных переменных в файле .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)()
----------------------------------^

Ответы [ 6 ]

3 голосов
/ 05 сентября 2010

Вам захочется переосмыслить многое из того, что вы делаете. .Net не будет переводить в vbscript построчно или даже класс / модуль по классу / модулю. Вам нужно посмотреть, что на самом деле делает ASP.Net, и выяснить, как это сделать в VBScript.

Одним из советов для vbscript является то, что вместо того, чтобы связываться с файлом vbscript io для обработки файла конфигурации, я обнаружил, что гораздо проще обрабатывать данные конфигурации, определяя эти переменные в отдельном файле, который затем будет включен в другие другие места. Затем вы можете использовать эти данные так же, как и другие переменные.

1 голос
/ 05 сентября 2010

Вы не можете затемнить переменную, а затем установить ее значение в той же строке в VBScript.

Dim outputSize As Integer outputSize = 550

И не используйте "" вокругцелое число.

0 голосов
/ 02 августа 2014

Используйте ключевое слово Const для определения постоянных переменных. например:

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
0 голосов
/ 13 сентября 2010

Нужно ли жить в ушедшей эпохе? Или просто быть вызванным из ушедшей эпохи? Если последнее является ответом, рассматривали ли вы перемещение кода в его собственную сборку и сделать видимым COM сборки, а затем просто получите доступ к нему из ушедшей эпохи.

0 голосов
/ 13 сентября 2010

вы МОЖЕТЕ затемнить переменную и присвоить значение с помощью

dim myVar : myVar = 4711

или

' this will create a "dictionary"

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

0 голосов
/ 05 сентября 2010

(я не буду конвертировать его для вас, но ...)

Существует несколько конверторов C # <-> VB.NET, например, http://converter.telerik.com/

Как только вы конвертируете этов VB.NET было бы немного проще преобразовать его в классический ASP / VBScript.

...