Avatar billede christian_h Nybegynder
22. september 2003 - 18:21 Der 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 " ") ??.

'Syntax'en er :

fileName = "c:\test\output.hex"
loadHex8File fileData, fileName


'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
Avatar billede martin_moth Mester
22. september 2003 - 18:34 #1
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
Avatar billede martin_moth Mester
22. september 2003 - 18:37 #2
Hov - det passer jo ikke:

Du skal tjekke om betingelsen er opfyldt, og så skippe hvis den er. Jeg har gjort det omvendte :o)
Avatar billede christian_h Nybegynder
22. september 2003 - 18:46 #3
Hva Mener du ?, hvordan skal koden så se ud ??
Avatar billede martin_moth Mester
22. september 2003 - 22:32 #4
Omvendt :o)
Har du ikke selv kodet ovenstående?
Avatar billede christian_h Nybegynder
23. september 2003 - 08:42 #5
Nej, det har jeg ikke, hvis jeg tildeler flere points, vil du så forklare den for mig ?, hvis JA, hvor mange point ekstra vil du så have for det ?

Mvh.

Christian_h
Avatar billede martin_moth Mester
23. september 2003 - 10:26 #6
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)
Avatar billede christian_h Nybegynder
23. september 2003 - 11:30 #7
Hej Martin.

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.

Mvh.

Christian_h
Avatar billede martin_moth Mester
23. september 2003 - 11:38 #8
@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)
Avatar billede christian_h Nybegynder
24. september 2003 - 18:06 #9
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 ??.

Mvh.

Christian_h
Avatar billede martin_moth Mester
24. september 2003 - 19:30 #10
GoTo er såmend fint nok, men der er en del religion om at det ikke er "pæn" programmering :o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester