Hej jag håller på och skriver ett litet provprogram som en övning för mig själv, problemet jag har är att när min textfil som jag läser ifrån blir mer än 38kb så stängs inte filen av close kommandot. Det ser rätt ut enligt min mening men du skulle kunna prova att bara skriva Close istället för Close filnr. Det resulterar att den stänger ALLA öppna filer. Du kan använda dig av ett kommando som heter REDIM PRESERVE och omdimentionera en array. Exempel: Det är väldigt inefektivt att göra en redim för varje loop. Om man istället lagrar antalet poster i en variabel och fördublar storleken när index överstiger eller är lika med storleken. Tackar för hjälpen skall prova detta så fort jag får en stund över. Då vill jag kontra med mindre kod där man anger hur många gånger programmet skall köra redim. Exemplet kör 1000 loopar och var 100'e gång så körs en Redim. Alltså 10 gånger.. filen stängs inte efter läsning av den??
Jag bifogar koden.
Textfilen skapas efterhand som man är klar med övningarna i programmet, öppnas för skrivning och stängs med en gång efteråt.
<code>
'byt sökväg till programmets katalog
'
sokveg
'Skapa fil om den inte finns
Open "resultat.txt" For Append As 1 'avstängda i utformandeläge
Close 1
filnr = FreeFile
FindText = UCase(strFornamn & " " & strEfternamn)
''Open "F:\robban\Robban_F\Mittslut\Mittslut\resultat.txt" For Input As filnr
Open "resultat.txt" For Input As filnr
Do While Not EOF(filnr)
X = X + 1
Line Input #filnr, FilBuffer
If InStr(UCase(FilBuffer), FindText) > 0 Then
hit(X) = FilBuffer
hitt = FilBuffer
End If
strArbuppg(X) = Right(hit(X), 1)
intNr = InStr(hitt, ";")
If strArbuppg(X) > "" Then
j = j + 1
Text2 = Text2 & strArbuppg(X) & " , "
If j > 8 Then
j = 1
''Text2 = ""
End If
End If
Loop
Close filnr
If intNr > 0 Then
intForsok = Left(hitt, intNr - 1)
End If
If intForsok = "" Then
intForsok = "1"
End If
End Sub
</code>
Tacksam för tips
RobbanSv: filen stängs inte efter läsning av den??
/PelleSv: filen stängs inte efter läsning av
Det hjälpte inte att utesluta filnr i close kommandot, felet låg i att de två variablernas index blev större än det max index dom var satta till, verkar som om programmet bara hoppar vidare i koden och skiter i allting efter sista loopen när väl maxindex är uppnått och filen förblir öppen.
Nu en fråga kan man dimma om variabeln under körning om den redan är satt till EX: ""Global strArbuppg(2000) As String "" eller skall man sätta den så stor att det inte finns risk att indexet uppnås.
RobbanSv: filen stängs inte efter läsning av den??
<code>
Private Sub Form_Load()
ReDim strArbuppg(0)
For a = 1 To 100
tmp = UBound(strArbuppg)
ReDim Preserve strArbuppg(tmp + 1)
Next
MsgBox UBound(strArbuppg)
End Sub
</code>
/PelleSv: filen stängs inte efter läsning av den??
Ex1:
<code>
Dim Index as Long
Dim Size as Long
Dim Data() as string
Redim Data(1 to 20)
Size = 20
Do until Index > 10000
Index = Index + 1
If Index > Size Then
Size = Size * 2
Redim Preserve Data(1 To Size)
End If
Data(1) = "Item: " & Index
Next
</code>
Ex2:
<code>
Dim Index as Long
Dim Size as Long
Dim Data() as string
Do until Index > 10000
Index = Index + 1
If Index > Size Then
Size = Size + 20
Redim Preserve Data(1 To Size)
End If
Data(1) = "Item: " & Index
Next
</code>Sv: filen stängs inte efter läsning av
Tack
RobbanSv: filen stängs inte efter läsning av den??
<code>
Private Sub Form_Load()
Dim steps = 100
ReDim strArbuppg(100)
For a = 1 To 1000
If a Mod 100 = 0 Then
tmp = UBound(strArbuppg)
ReDim Preserve strArbuppg(Tmp + Steps)
End If
Next
MsgBox UBound(strArbuppg)
End Sub
</code>
/Pelle