webForumDet fria alternativet

Visual Basic 2008 - arrayer

ASPur ASP

7 svar · 916 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Jag försöker jämföra en viss fils extension (t.ex. .jpg) med en lista/array på godkända typer. Tyvärr lyser mina kunskaper i detta språk endast med sin frånvaro (om jag är i fel forum ber jag om ursäkt). Hur jag än försöker få till det blir det syntaxfel... :( Nuvarande försök:

Public Sub Main()

        Dim extensionDotPlace, i As Int32
        Dim Ext As String

        extensionDotPlace = Dts.Variables("ImageFileName").Value.ToString().LastIndexOf(".")
        Ext = Dts.Variables("ImageFileName").Value.ToString().Substring(extensionDotPlace + 1)

        i = 0

        Dts.Variables("OKIMageFile").Value = False

       ' Här börjar problemet Om det utesluts tom *** så kör programmet snällt.
        Dim ExtensionArr As String() = {"jpg", "gif", "tif"} 

        While Dts.Variables("OKIMageFile").Value = False And i < Len(ExtensionArr) - 1 
            If Ext = ExtensionArr(i).ToString() Then
                Dts.Variables("OKIMageFile").Value = True

            End If

            i = i + 1

        End While
        ' ***

        'test  
        MessageBox.Show(Dts.Variables("ImageFileName").Value.ToString() + ", Ext = " + Dts.Variables("ImageFileName").Value.ToString().Substring(extensionDotPlace + 1))

        Dts.TaskResult = ScriptResults.Success
    End Sub

ger felet skrev:

SSIS package "Pip.dtsx" starting.
Error: 0x1 at ST - Check Extension: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException: The element cannot be found in a collection. This error happens when you try to retrieve an element from a collection on a container during execution of the package and the element is not there.
---> System.Runtime.InteropServices.COMException (0xC0010009): The element cannot be found in a collection. This error happens when you try to retrieve an element from a collection on a container during execution of the package and the element is not there.

at Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSVariables100.get_Item(Object Index)
at Microsoft.SqlServer.Dts.Runtime.Variables.get_Item(Object index)
--- End of inner exception stack trace ---
at Microsoft.SqlServer.Dts.Runtime.Variables.get_Item(Object index)
at ST_571c3e0e294e4c9792b1fd8f2b568f0f.vbproj.ScriptMain.Main()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
Task failed: ...SSIS package "Pip.dtsx" finished: Failure.
The program '[2200] Pip.dtsx: DTS' has exited with code 0 (0x0).

Idéer om vad som är fel?

voigtann1Medlem sedan juni 20019 519 inlägg
#2
Dim ExtensionArr
ExtensionArr = array("jpg", "gif", "tif")
aasahMedlem sedan mars 20034 471 inlägg
#3

voigtann1 skrev:

Dim ExtensionArr
ExtensionArr = array("jpg", "gif", "tif")

Det funkar inte. När jag skriver så händer tre saker:

* Dim ExtensionArr <--- Det här ExtensionArr får en grön vågig orm under sig (Visual Studio 2008)
* ExtensionArr = Array("jpg", "gif", "tif") Order "Array" får en blå vågig orm.
* Jag får en varning och ett fel:

Warning 1 Variable declaration without an 'As' clause; type of Object assumed.
Error 2 'Array' is a type and cannot be used as an expression.

Scriptet genererar ingen objektkod. :q

aasahMedlem sedan mars 20034 471 inlägg
#4

Efter lite trial and mycket Error fungerar det här nästan:

    Public Sub Main()

        Dim extensionDotPlace As Int32
        Dim Ext As String
        Dim i As Int32
        Dim msg As String

        extensionDotPlace = Dts.Variables("ImageFileName").Value.ToString().LastIndexOf(".")
        Ext = Dts.Variables("ImageFileName").Value.ToString().Substring(extensionDotPlace + 1)

        i = 0

        Dts.Variables("OKImageFile").Value = False

        Dim ExtensionArr = Dts.Variables("OKImageTypes").Value.ToString().Split(" ")

        While Dts.Variables("OKImageFile").Value = False And i < Len(ExtensionArr) - 1
            If Ext = ExtensionArr(i).ToString() Then
                Dts.Variables("OKImageFile").Value = True
            End If

            i = i + 1

        End While

        'Fungerar
        'Dts.Variables("OKImageFile").Value = (Ext = "tif")
        'If Ext = "tif" Then msg = "Extension IS tif" Else msg = "Extension is NOT tif"
        msg = "The file extension is " + Ext

        If Dts.Variables("OKImageFile").Value = True Then msg = msg + "which is OK." Else msg = msg + "which is NOT ok."

        MessageBox.Show(Dts.Variables("ImageFileName").Value.ToString() + ", " + msg)

        Dts.TaskResult = ScriptResults.Success
    End Sub

Nu blir det TypeMisMatched... Någon som ser var och varför?

aasahMedlem sedan mars 20034 471 inlägg
#5

Efter ännu mer trial and error, ser den fungerande koden ut så här:

Public Sub Main()

        Dim extensionDotPlace As Int32
        Dim Ext As String
        Dim i As Int32
        Dim msg As String

        'Find position of dot
        extensionDotPlace = Dts.Variables("ImageFileName").Value.ToString().LastIndexOf(".")

        'Find the file extension
        Ext = Dts.Variables("ImageFileName").Value.ToString().Substring(extensionDotPlace + 1)

        'Initialize before while
        i = 0
        Dts.Variables("OKImageFile").Value = False

        'Create array to compare file extension to
        Dim ExtensionArr = Dts.Variables("OKImageTypes").Value.ToString().Split(" ")

        'Check if the file is one we want to handle
        While Dts.Variables("OKImageFile").Value = False And i < ExtensionArr.Length() - 1
            If Ext = ExtensionArr(i).ToString() Then
                Dts.Variables("OKImageFile").Value = True
            End If

            'Find next OK extension to check
            i = i + 1

        End While

        Dts.TaskResult = ScriptResults.Success
    End Sub

Jag hittar inte markeringen för att sätta ärendet som löst? :q
Nu, ca 20 min senare gick det plötsligt att markera ärendet som löst! Skumt... länken fanns inte från början!
Va i... markeringen försvann -liksom länken - efter redigering?!?

aasahMedlem sedan mars 20034 471 inlägg
#6

Hmm... verkar bara vara sista meddelandet som ej kan markeras? :q Testar att skapa ett extra svar... Hjälpte inte. :( Ursäkta moderatorer! :(

Jon@sMedlem sedan dec. 2010159 inlägg
#7

aasah skrev:

Hmm... verkar bara vara sista meddelandet som ej kan markeras? :q Testar att skapa ett extra svar... Hjälpte inte. :( Ursäkta moderatorer! :(

Det är en bugg i wF. Direkt när man postar ett svar så kan man inte markera det som lösning. Men om man efter att ha postat svaret trycker på uppdatera så att sidan laddas om, så kan man markera svaret.

aasahMedlem sedan mars 20034 471 inlägg
#8

Tusen tack Jon@s! :)

136 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)