2010-09-05 2 views
1

Я знаю, что это звучит назад, но мне нужно преобразовать это из C# в Classic ASP. Я не знаю VBScript, поэтому мне нужна помощь.Преобразуйте этот код C# в классический 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)() 
----------------------------------^ 

ответ

0

(не пощажу его для вас, но ...)

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

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

+0

Спасибо, я преобразовал его, но он все еще кажется далеким от ASP. Я обновил свой пост. – TruMan1

3

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

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

+0

Я взял ваш совет в использовании переменных вместо файла конфигурации. Я думаю, что смогу переместить их в отдельный файл в конце концов, но мне кажется, мне все еще нужно переосмыслить некоторые фундаментальные вещи. Мой пост отражает мои изменения. – TruMan1

1

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

Dim Outputsize As Integer Outputsize = 550

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

+0

Я обновил свой код выше. Я не могу найти способ использовать словарь или что-то подобное. – TruMan1

+0

Ознакомьтесь с этим сайтом http://www.devguru.com/technologies/vbscript/quickref/dictionary.html. –

0

вы можете уменьшить переменную и присвоить Валуй по

dim myVar : myVar = 4711

или

' this will create a "dictionary"

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

0

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

0

ключевое слово, чтобы определить постоянные переменные. например:

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 
Смежные вопросы