webForumDet fria alternativet

Skippa filen och lägga in det i programmet direkt?

.NET

10 svar · 305 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

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
Medlem sedan okt. 20023 030 inlägg
#2

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
Medlem sedan mars 20023 686 inlägg
#3

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.

Medlem sedan apr. 20022 743 inlägg
#4

Lägg in raderna i en array som du sedan loopar igenom istället för att loopa igenom raderna i filen.

Medlem sedan okt. 20023 030 inlägg
#5

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. :)

Medlem sedan mars 20023 686 inlägg
#6

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

Medlem sedan apr. 20022 743 inlägg
#7

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
Medlem sedan okt. 20023 030 inlägg
#8

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
Medlem sedan mars 20023 686 inlägg
#9

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

Medlem sedan okt. 20023 030 inlägg
#10

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. :)

Medlem sedan mars 20023 686 inlägg
#11

Aha!

Jag tackar och bugar inför er! Mina gudar :)

263 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)