kjey Skrevet 17. november 2005 Rapporter Del Skrevet 17. november 2005 (endret) Jeg driver å lager et program i VB 6.0 som er ment for å være til basketlaget jeg spiller på (er bare et skoleprosjekt). I programmet lagrer man hvilket lag man spilte mot, poeng på begge lag osv. Alle verdier og tekststrenger blir lagret i en .dat fil. På forsiden er det en tabell som viser antall seiere og antall tap, men det skal også være gjennomsnittlig poeng pr. kamp. Poengene er lagret i "kamp.poeng" som er i typen "kamper". Hvordan kan jeg ta gjennomsnittet av alle verdiene (når de er lagt sammen)? Litt vanskelig å forklare, men eksemplet på hva jeg mener er nedenfor: Alle poengene lagt sammen delt på antall kamper spilt. Noen som klarer å løse problemet for meg? Har prøvd løkker, men lykkes ikke På forhånd takk! Endret 17. november 2005 av kjey Lenke til kommentar
JohndoeMAKT Skrevet 17. november 2005 Rapporter Del Skrevet 17. november 2005 Nå har jeg ikke kodet VB på et par år, men jeg trenger litt bedre forklaring om hvor og hvordan du lagrer poengene til hver kamp. Er det mulig at du limer inn litt kode som forklarer? Lenke til kommentar
kjey Skrevet 18. november 2005 Forfatter Rapporter Del Skrevet 18. november 2005 Her er modulen min: Type kamper motstander As String * 30 stillingHjemme As Integer stillingBorte As Integer kommentar As String * 150 seier As Integer tap As Integer End Type Global kamp As kamper Global sistepost As Integer Global antallposter As Integer Her er knappen som registrerer den nødvendige informasjonen som puttes inn i fila: Private Sub cmdRegistrer_Click() Dim hjemme As Integer Dim borte As Integer hjemme = txtBøler.Text borte = txtMotstander.Text If hjemme > borte Then kamp.seier = 1 kamp.tap = 0 Else kamp.tap = 1 kamp.seier = 0 End If kamp.motstander = txtLag.Text kamp.stillingHjemme = hjemme kamp.stillingBorte = borte kamp.kommentar = txtKommentarer.Text Put #1, sistepost, kamp sistepost = sistepost + 1 txtLag.Text = "" txtBøler.Text = "" txtMotstander.Text = "" txtKommentarer.Text = "" End Sub Hvordan skal jeg da kunne hente opp alle "stillingHjemme", plusse dem sammen og dele på antall poster slik at den tar gjennomsnittet? Lenke til kommentar
GeirGrusom Skrevet 18. november 2005 Rapporter Del Skrevet 18. november 2005 En ting: det er ikke noe poeng i å bruke Integer data type i VB6, bruk heller Long Du må lese igjennom alle postene, summer tap og seier, og del på antallposter gjennomsnittet bør lagres som single eller double for å få et desimaltall Dim k As kamp Dim gjennomsnitt As Single Dim i As Long Dim totalpoeng As Long Seek #1, 0 For i = 0 To antallkamper - 1 Get #1, , k totalpoeng = totalpoen + k.seier + k.tap Next gjennomsnitt = CSng(totalpoeng) / CSng(antallposter) Lenke til kommentar
kjey Skrevet 22. november 2005 Forfatter Rapporter Del Skrevet 22. november 2005 (endret) Etter man har lagret data i filen, hvordan kan man da slette én og én "kamp" valgt av brukeren? Endret 22. november 2005 av kjey Lenke til kommentar
aadnk Skrevet 22. november 2005 Rapporter Del Skrevet 22. november 2005 Det er bedre å ha all data liggende i en array, i RAM'en eller arbeidsminnet, for å så lagre informasjonen på et gitt intervall eller på brukerens kommando. Dette kan eksempelvis gjøres ved hjelp av følgende kode (som du helst bør legge i modulen): ' Array som inneholder alle kamper i nåværende filPublic aFights() As kamper Public Sub DeleteFight(ByVal Index As Long) Dim Tell As Long ' Flytt alle elementer ovenfor ett steg ned For Tell = Index + 1 To UBound(aFights) ' La elementet under tilsvare det ovenfor LSet aFights(Tell) = aFights(Tell + 1) Next ' Fjern overflødige elementer If UBound(aFights) <> LBound(aFights) Then ReDim Preserve aFights(LBound(aFights) To UBound(aFights) - 1) Else Erase aFights End If End Sub Public Sub AddFight(srcData As kamper, Optional ByVal Index As Long = -1) Dim Tell As Long ' Først, sjekk om kamp-arrayen er allokert If Not (Not aFights) Then ' Legg til et ekstra element ReDim Preserve aFights(LBound(aFights) To UBound(aFights) + 1) Else ' Om ikke, alloker nytt element ReDim aFights(1 To 1) End If ' Dersom indeksvariabelen er tom, skal den fylles med den reelle posisjonen If Index < LBound(aFights) Then Index = UBound(aFights) End If ' Gi plass til et nytt element i den angitte posisjonen For Tell = UBound(aFights) To Index + 1 Step -1 ' Flytt element LSet aFights(Tell) = aFights(Tell - 1) Next ' Sett det nye elementet LSet aFights(Index) = srcData End Sub Public Sub LoadData(sFile As String) Dim Free As Long, lngNum As Long ' Først må vi verifisere at filen eksisterer If Dir(sFile) <> "" Then ' Finn ledig filhandlingsid Free = FreeFile ' Deretter kan filen åpnes Open sFile For Binary As #Free ' Hent antall elementer i array Get #Free, , lngNum ' Alloker array deretter ReDim aFights(1 To lngNum) ' Last inn all data Get #Free, , aFights ' Dealloker alle resurser/objekter knyttet til den åpnede filen Close #Free End If End Sub Public Sub SaveData(sFile As String) Dim Free As Long, lngNum As Long ' Finn ledig filhandlingsid Free = FreeFile ' Slett filen dersom den allerede eksisterer If Dir(sFile) <> "" Then Kill sFile End If ' Deretter kan filen åpnes Open sFile For Binary As #Free ' Lagre antall elementer i array Put #Free, , CLng(UBound(aFights)) ' Lagre all data Put #Free, , aFights ' Dealloker alle resurser/objekter knyttet til den åpnede filen Close #Free End Sub For å legge til elementer/kamper, benytter du prosedyren AddFight: Dim Test As kamper ' Sett informasjonen som skal legges til With Test .motstander = txtLag.Text .stillingHjemme = hjemme .stillingBorte = borte .kommentar = txtKommentarer.Text End With ' Legg til data i array AddFight Test Dersom du derimot vil at informasjonen bør legges inn som det første elementet i rekken, endrer du siste linje til følgende: AddFight Test, 1 Tilsvarende bruker du DeleteFight for å slette en kamp, der Index er «post»nummeret til kampen du vil fjerne. Bruken av LoadData og SaveData burde være innlysende nok. I tillegg kan du nå slippe å anvende strenger med statisk lengde. På den måten vil det ikke lenger være en praktisk grense på hvor lange kommentarene og motstandernavnene kan være. Endre følgende i modulen din: Type kamper motstander As String stillingHjemme As Integer stillingBorte As Integer kommentar As String seier As Integer tap As Integer End Type Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå