Jag har två problem. Detta kanske är till någon hjälp? Fråga 1 >SvenPon Ett misstag, när jag skulle föklara,sorry. Har du funderat på det här med information? Vist är det fantastisk vad man kan gör när man har tillräckligt. Tack för all hjälp.Split och räkna filer problem.
1 Split.
Jag försöker splita en fil:
<code>
C:\Inetpub\wwwroot\Hemsidor\WHL\M_Temp\tmp_1_Index.asp
</code>
Borde inte vara några problem.
<code>
Dela = Split(g, "_",)
</code>
Som jag se det, så är ju denna filen i 4:a delar
0=C:\Inetpub\wwwroot\Hemsidor\WHL\M
1=Temp\tmp
2=1
3=Index.asp
Det är index 3 jag vill ha tag i, men så fort som jag skriver Del = Dela(3) så får jag ett error:
Supscript out off range.
Som jag läser det, jag vill ha någonting som ligger utanför index.
Hur löser jag det??
2 Räkna
Jag behöver räkna hur många av samma fill som finns i katalogen.
Det kan se ut så här:
<code>
tmp_1_Index.asp
tmp_2_Index.asp
tmp_3_Index.asp
tmp_4_Index.asp
tmp_1_Historia.asp
tmp_2_Historia.asp
</code>
Som ni ser, så förekommer samma filnamn flera gånger(när den är splittad).
Jag försöker så här:
<code>
WebbPath = Form1.StatusBar1.Panels(1).Text & "\M_Temp\"
For Each g In fso.GetFolder(WebbPath).Files
If fso.FileExists(g) Then
Dela = Split(g, "_")
Del = Dela(3) <----------------------Här ligger första felet
If Del <> Form1.List2 Then
k = 1
Else
k = k + 1 <--------------------Här skulle jag räkna filerna, men hur?
End If
End If
Next
</code>
Några förslag till lösning?Sv: Split och räkna filer problem.
<code>
Function GetName(FileName As String) As String
Dim Pos As Long
Dim Last As Long
Pos = InStr(1, FileName, "_", vbBinaryCompare)
Do While Pos
Last = Pos + 1
Pos = InStr(Last, FileName, "_", vbBinaryCompare)
Loop
If Last Then
GetName = Mid(FileName, Last)
Else
GetName = FileName
End If
End Function
Sub FSOTest()
Dim fso As Scripting.FileSystemObject
Dim File As Scripting.File
Dim Folder As Scripting.Folder
Dim Dictionary As Scripting.Dictionary
Dim vTemp As Variant
Dim Name As String
Dim WebbPath As String
WebbPath = "c:\" 'Form1.StatusBar1.Panels(1).Text & "\M_Temp\"
Set fso = New FileSystemObject
Set Folder = fso.GetFolder(WebbPath)
Set Dictionary = New Dictionary
For Each File In Folder.Files
Name = GetName(File.Name)
If Dictionary.Exists(Name) Then
Dictionary.Item(Name) = Dictionary.Item(Name) + 1
Else
Dictionary.Add Name, 1
End If
Next
For Each vTemp In Dictionary.Keys
Debug.Print vTemp & ": " & Dictionary.Item(vTemp)
Next
End Sub
</code>Sv: Split och räkna filer problem.
>Dela = Split(g, "_",)
Vad gör det sista kommatecknet i Split(g,"_" detta ,) ???Sv: Split och räkna filer problem.
>Andreas Det såg väldigt intresant ut. Skall titta på det.
Det skall ju användas så här, i List2 så finns de filnamn som jag skall bearbeta. De hetter t ex
index.asp, historia.asp osv.
När de är bearbetade, så görs en kopia i ;_temp ock då blir namnen
tmp_1_Index.asp tmp_1_Historia.asp
För varje operation som jag gör så skall filnamnets nummer uppdateras.
tmp_1_Index.asp,tmp_2_Index.asp,tmp_3_Index.asp
Jag har aldrig använt mig av dictionary, är det rätt väg för detta?Sv: Split och räkna filer problem.
Om du vill begränsa det till list2 så kan du skriva så här:
<code>
Function GetName(FileName As String) As String
Dim Pos As Long
Dim Last As Long
Pos = InStr(1, FileName, "_", vbBinaryCompare)
Do While Pos
Last = Pos + 1
Pos = InStr(Last, FileName, "_", vbBinaryCompare)
Loop
If Last Then
GetName = Mid(FileName, Last)
Else
GetName = FileName
End If
End Function
Sub FSOTest()
Dim fso As Scripting.FileSystemObject
Dim File As Scripting.File
Dim Folder As Scripting.Folder
Dim Dictionary As Scripting.Dictionary
Dim vTemp As Variant
Dim Index as Long
Dim Name As String
Dim WebbPath As String
WebbPath = "c:\" 'Form1.StatusBar1.Panels(1).Text & "\M_Temp\"
Set fso = New FileSystemObject
Set Folder = fso.GetFolder(WebbPath)
Set Dictionary = New Dictionary
For Index = 0 To Form1.List2.ListCount - 1
Dictionary.Add Form1.List2.List(Index), 0
Next
For Each File In Folder.Files
Name = GetName(File.Name)
If Dictionary.Exists(Name) Then
Dictionary.Item(Name) = Dictionary.Item(Name) + 1
End If
Next
For Each vTemp In Dictionary.Keys
Debug.Print vTemp & ": " & Dictionary.Item(vTemp)
Next
End Sub
</code>
Du har inte berättat hur du tänkt presentera resultatet. Jag listar därför resultatet i debug-fönstret.
Dictionary är något mycket användbart. Du bör lära dig använda det.Sv: Split och räkna filer problem.
Jo Andreas information är skoj, men ibland så är det svårt att se träna för skogens
skull. Det är för mycket olika varianter som man kan göra, och det är inte alltid som man ser den smidigaste eller enklaste lösningen.
Nej jag har inte riktigt sagt vad jag skall ha detta till, men tanken är att det skall bli ett verktyg för att underlätta för flerspråkiga webbplatser.