Du vill alltså ta bort filen efter att du har läst in den eller har du förklarat konstigt? ;)
Ifall det första:
[...]
Loop
Close FF
[b]Kill App.Path & "\module.txt"[/b]
End Sub
10 svar · 305 visningar · startad av medialabs
Har ett knivigt problem, har ett program som läser in en .txt fil som innehåller 40 rader med tal, så här, och programmet läser in filen. Men jag skulle vilja göra mig av med .txt filen och sätta in dessa 40 rader direkt i programmet så att det inte längre behövs några externa filer till programmet.
0001101
0011001
0010011
0111101
0100011
osv..
Koden som jag har nu för att läsa in filen.
Private Sub Form_Load()
Dim FF As Integer, i As Integer, m As Integer
Dim Str As String
Me.Line (0, 0)-(Me.Width, 0)
i = 0: m = 0
FF = FreeFile(1)
Open App.Path & "\module.txt" For Input As #FF 'All information stored in the txt file
Do While Not EOF(FF)
Line Input #FF, Str 'Read file line after line
If m < 3 Then 'There are 3 diferent modules for the number depending on first digit
Mdl(m, i) = Str
Else: MdlLeft(i) = Str 'if m > 4 (31'st line), define what module is for the first n°(0-9)
End If
i = i + 1 'Next number(0-9)
If i = 10 Then
i = 0: m = m + 1 'First n° (0), next module
End If
Loop
Close FF
End Sub
Du vill alltså ta bort filen efter att du har läst in den eller har du förklarat konstigt? ;)
Ifall det första:
[...]
Loop
Close FF
[b]Kill App.Path & "\module.txt"[/b]
End Sub
Jag menar så att istället för att programmet ska läsa in filen och dess innehåll varje gång programmet ska startas så vill jag skriva in innehållet från filen in i programmet direkt. alltså att koda in det som står i txt filen. Så att jag inte behöver ha med txt filen när programmet ska köras.
Lägg in raderna i en array som du sedan loopar igenom istället för att loopa igenom raderna i filen.
Eller du kanske vill att filen ska ligga med i exe-filen istället för att ha en extern fil? :)
Gör isåfall såhär, läs mitt svar här och strunta i punkt 5 och 6 och gör detta istället:
Klicka på Action >> Add a new Resource..., klicka på Open file with new resource..., välj textfilen module.txt, skriv in module som Resource Type, en siffra som Resource Name och 1053 som Resource Language. Klicka på Add Resource.
Sedan för att läsa in filen gör du såhär istället:
Private Sub Form_Load()
Dim FF As Integer, i As Integer, m As Integer, a As Integer
Dim Strs() As String, Dim Str As String
Me.Line (0, 0)-(Me.Width, 0)
i = 0: m = 0
FF = FreeFile(1)
Strs = Split(LoadResData([b][i]<siffran du angav som resource name>[/i][/b], "module"), vbCrLf) 'All information stored in the txt file
For a = LBound(Strs) To UBound(Strs)
Str = Strs(a) 'Read file line after line
If m < 3 Then 'There are 3 diferent modules for the number depending on first digit
Mdl(m, i) = Str
Else: MdlLeft(i) = Str 'if m > 4 (31'st line), define what module is for the first n°(0-9)
End If
i = i + 1 'Next number(0-9)
If i = 10 Then
i = 0: m = m + 1 'First n° (0), next module
End If
Next a
Close FF
End Sub
r/ Tydligen var det så. Ifall det är så få rader att du orkar lägga till alla i en array bör du göra som Poffe säger. :)
Att lägga in dem i en array låter intressant, det är inte så många rader att lägga in så det borde jag orka göra men har ingen anning om hur arrayn ska se ut :D
Antingen:
varMinArray(0) = "Rad 1"
varMinArray(1) = "Rad 2"
varMinArray(2) = "Rad 3"
eller
varMinArray = Split("Rad 1, Rad 2, Rad 3", ",")
och för att loopa
For a = LBound(varMinArray) To UBound(varMinArray)
Str = varMinArray(a) 'Read file line after line
If m < 3 Then 'There are 3 diferent modules for the number depending on first digit
Mdl(m, i) = Str
Else: MdlLeft(i) = Str 'if m > 4 (31'st line), define what module is for the first n°(0-9)
End If
i = i + 1 'Next number(0-9)
If i = 10 Then
i = 0: m = m + 1 'First n° (0), next module
End If
Next
Glöm inte att köra en Dim på arrayen först.
Ifall första exemplet:
Dim varMinArray([b][i]antal rader - 1[/i][/b]) As String
Ifall andra exemplet:
Dim varMinArray() As String
Jag behöver alltså endast detta i min load_form:
d
Private Sub Form_Load()
Dim FF As Integer, i As Integer, m As Integer, Str As String, varMinArray() As String
varMinArray = Split("0001101,0011001,0010011,0111101,0100011,0110001,0101111,0111011,0110111,0001011,0100111,0110011,0011011,0100001,0011101,0111001,0000101,0010001,0001001,0010111,1110010,1100110,1101100,1000010,1011100,1001110,1010000,1000100,1001000,1110100,000000,001011,001101,001110,010011,011001,011100,010101,010110,011010", ",")
For a = LBound(varMinArray) To UBound(varMinArray)
Str = varMinArray(a) 'Read file line after line
If m < 3 Then 'There are 3 diferent modules for the number depending on first digit
Mdl(m, i) = Str
Else: MdlLeft(i) = Str 'if m > 4 (31'st line), define what module is for the first n°(0-9)
End If
i = i + 1 'Next number(0-9)
If i = 10 Then
i = 0: m = m + 1 'First n° (0), next module
End If
Next
End Sub
och kan ta bort :
Me.Line (0, 0)-(Me.Width, 0)
i = 0: m = 0
?
om jag tar bort dem så verkar programmet fungera. Men man vet ju aldrig :D
Japp. Det enda den där raden gör är att göra en linje över hela ditt fönster ifrån högerkanten till vänsterkanten. :)
r/ i = 0 och m = 0 ger variablarna värdet 0 vilket de redan har eftersom de är nyallokerade. :)