aasahMedlem sedan mars 20034 471 inlägg 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?
Dim ExtensionArr
ExtensionArr = array("jpg", "gif", "tif")
aasahMedlem sedan mars 20034 471 inlägg
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 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 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 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
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.