22. september 2003 - 18:21Der er
9 kommentarer og 1 løsning
Ignorer første linie
Hej Alle Eksperter.
Er der nogen der kan ændre denne kode, så den ikke læser "FØRSTE" linie i den fil man loader, hvis linien ser sådan her ud ":020000020000FC" (UDEN " ") ??.
'Koden ser sådan her ud dim fileName As String dim fileData() As fData 'declares an array of type fdata
Sub loadHex8File(fdat() As fData, fileName As String) ReDim fdat(numberOfBytes(fileName)) ' - 1) 'change size of array to the number of bytes in the hexfile Dim curLine As Integer, curAddr As Long, curIdx As Long, f As Integer, a$, i As Integer f = FreeFile Open fileName For Input As f Do Until EOF(f) curLine = curLine + 1 Line Input #f, a$ curAddr = "&H" & Mid$(a$, 4, 4) 'get lineaddress For i = 0 To Int("&H" & Mid$(a$, 2, 2)) - 1 'get # bytes in line fdat(curIdx).Addr = curAddr + i If i = 0 Then fdat(curIdx).newLine = True Else fdat(curIdx).newLine = False End If fdat(curIdx).Dbyte = "&H" & Mid$(a$, i * 2 + 10, 2) curIdx = curIdx + 1 Next i Loop Close f End Sub
Open fileName For Input As f Do Until EOF(f) curLine = curLine + 1 Line Input #f, a$ IF LEFT(@a,15) <> ":020000020000FC" AND CURLINE > 1 THEN '< NY LINIE curAddr = "&H" & Mid$(a$, 4, 4) 'get lineaddress For i = 0 To Int("&H" & Mid$(a$, 2, 2)) - 1 'get # bytes in line fdat(curIdx).Addr = curAddr + i If i = 0 Then fdat(curIdx).newLine = True Else fdat(curIdx).newLine = False End If fdat(curIdx).Dbyte = "&H" & Mid$(a$, i * 2 + 10, 2) curIdx = curIdx + 1 Next i END IF '< NY LINIE Loop
Nej da - men jeg har ikke lige VB6 her, og kan ikke huske hvordan man springer videre i en for-løkke. Men det kan man altså gøre på en elegant måde. Man kan også gøre det på en meget uelegant måde med GoTo
Så du kan få en GRIM løsning her (med GoTo - FY!!!), og så kan jeg give dig en bedre løsning senere:
Den Grimme løsning:
Open fileName For Input As f Do Until EOF(f) curLine = curLine + 1 Line Input #f, a$ IF LEFT(@a,15) = ":020000020000FC" AND CURLINE < 2 THEN GOTO Skip ' < NY curAddr = "&H" & Mid$(a$, 4, 4) 'get lineaddress For i = 0 To Int("&H" & Mid$(a$, 2, 2)) - 1 'get # bytes in line fdat(curIdx).Addr = curAddr + i If i = 0 Then fdat(curIdx).newLine = True Else fdat(curIdx).newLine = False End If fdat(curIdx).Dbyte = "&H" & Mid$(a$, i * 2 + 10, 2) curIdx = curIdx + 1 SKIP: ' < NY Next i Loop
Det er helt simpelt - hvis variablen starter med :0200... og linienummeret er mindre end 2 (dvs. første linie) springer den over
Hvis du roder med VB skal du nok prøve at sætte dig ind i IF-THEN-ELSE strukturer, løkker osv (igen - intet belærende, et venlig ment råd - kode man ikke selv forstår fører med garanti til problemer i læssevis og dårlige programmer)
GoTo er normalt pu-bad i programmering, noget du bør undgå :o)
Jeg er helt med på IF-THEN-ELSE strukturer, og FOR-NEXT løkker, det jeg ikke helt kan få ind i hovedet, er sådan noget som "Int("&H" & Mid$(a$, 2, 2)) - 1" hvorfor bruges $ tegnet ? (&H og Mid kender jeg også godt til), hvad bruges @ i din nye linie til, jeg er stadig ved at lære VB, så jeg suger ALT det nye viden til mig som jeg kan.
@a er en slåfejl - der henvises naturligvis til variablen a$.
Jeg bruger aldrig $'tegn, men jeg mener shj et sted har beskrevet hvad det bruges til.
Jeg har selv det princip, at jeg vil forstå den kode jeg bruger - derfor skriver jeg den altid selv fra bunden, for så er jeg sikker på at jeg kan finde ud af at rette den. Hvis jeg var dig, ville jeg finde ud af hvad du ønsker at koden skal gøre, og så kode det selv, evt. med inspiration i det eksempel du har :o)
Hvorfor er GoTo ikke god, sålænge man "holder" den inden for samme subrutine ??, så vidt jeg ved, sker der ikke noget mad stacken, bare man ikke springer til et sted uden for den sub man har gang i. Er det HELT forkert forstået ??.
GoTo er såmend fint nok, men der er en del religion om at det ikke er "pæn" programmering :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.