• a) Je dimt je array als (), dus geen dimensies. Je kunt niet straffeloos (als in bijvoorbeeld JavaScript) gewoon je array gaan vullen. Kijk eens naar
ReDim of
Redim Preserve. Als je de foutmelding goed had gelezen, of desnoods de foutmelding in de help had opgezocht was je daar zelf achter gekomen.
• b) De methode die je nu gebruikt is niet erg efficiënt. Dit lijkt me sneller & beter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| Option Explicit
Private Sub Form_Load()
Dim strFileContents As String
Dim arrTMP() As String
Dim L As Long
Const cLineDelimiter = vbCrLf 'Regels worden gescheiden door een CrLf
strFileContents = LoadFile("C:\myDir\MyFile.txt") 'Lees bestand
arrTMP = Split(strFileContents, cLineDelimiter) 'Split het bestand in regels
For L = 0 To UBound(arrTMP)
'Replace ongewenste strings
arrTMP(L) = Replace(arrTMP(L), "/07_Upload/Admin/", "", , , vbTextCompare)
arrTMP(L) = Replace(arrTMP(L), "/09_Jedda/Jantje/", "", , , vbTextCompare)
arrTMP(L) = Replace(arrTMP(L), "/51_Blaat/Pietje/", "", , , vbTextCompare)
arrTMP(L) = Left(arrTMP(L), 71) 'Strings afkappen op 71 chars
Next
strFileContents = Join(arrTMP, cLineDelimiter) 'Join de regels weer
If SaveFile("C:\mydir\myfile.txt", strFileContents) Then
MsgBox "Bestand succesvol opgeslagen", vbInformation
Else
MsgBox "Fout bij opslaan bestand!", vbCritical
End If
End Sub
Public Function LoadFile(strFileName As String)
'Laadt een file in 1 klap in een string.
'Geeft een lege string als bestand niet bestaat
Dim strTMP As String
Dim FF As Integer
strTMP = "" 'Inhoud initialiseren
If Len(Dir(strFileName)) > 0 Then 'Bestaat het bestand?
FF = FreeFile 'Vraag een vrije filehandle aan
Open strFileName For Binary As #FF 'Open bestand
strTMP = String(LOF(FF), Chr(0)) 'Initialiseer temp string op lengte van bestand met 0-en
Get #FF, , strTMP 'Lees het hele bestand in de string
Close #FF 'Sluit bestand
End If
LoadFile = strTMP 'Inhoud teruggeven
End Function
Public Function SaveFile(strFileName As String, strContent As String) As Boolean
'Saved een string in een file in 1 klap
Dim FF As Integer
SaveFile = False 'We gaan er van uit dat het fout gaat :-)
On Error GoTo errSaveFile
FF = FreeFile 'Vraag een vrije filehandle aan (weer :P )
Open strFileName For Output As #FF 'Klaar voor output?
Print #FF, strContent 'Schrijven die hap!
Close #FF 'Sluiten weer!
SaveFile = True 'Het is goedgegaan! WOEI!
errSaveFile:
End Function |
De code bevat een LoadFile functie die het bestand in een string plempt, een SaveFile functie die de string weer in het bestand plempt en een loopje waarin je je replaces en afkappen van de strings uitvoert.
• c) Een
regular expression kan dit waarschijnlijk nog mooier en sneller oplossen, maar die ga ik nu écht niet meer schrijven. Het is ook voor mij al laat en een regex schudt (zelfs

) ik niet zomaar uit me mouw.
Thunk schreef op 29 maart 2004 @ 23:34:
Ja hoor prima idee. Was op het moment van schrijven
erg moe en lui, had ik al mn excuses voor aangeboden. Heb vanavond zelf lopen knutselen maar ik loop nog steeds vast (zoals je kan zien in post hierboven). Heb zelf ook heus wel gezocht naar oplossingen :x
• d) Met de klem-toon op
lui. En als je moe bent dan moet je rusten en er dan nog eens naar kijken. Ik heb het je nu écht
helemaal voorgekauwd. Nogmaals: Bekijk eens een tutorial, koop of lees een boek en bestudeer de helpfile eens. Dit is toch écht erg basic programmeerwerk. Succes ermee!
Let op! Als je bestanden groter dan een paar meg worden, dan kun je beter in blokken gaan werken van, zeg, 1 meg ofzo. Hiermee voorkom je dat je in 1 klap een bestand van 2 gig "per-ongeluk" in je geheugen leest. Vindt windows (en VB overigens ook) niet erg leuk. Bestanden lezen in blokken heb ik
hier al méér dan eens gedemonstreerd. De methode daarvoor is makkelijk af te leiden uit
deze post of uit het zipje uit
deze post.
[
Voor 67% gewijzigd door
RobIII op 30-03-2004 02:03
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij