Avatar billede civil05 Nybegynder
13. september 2007 - 22:24 Der er 13 kommentarer og
1 løsning

databehandlingsdatabase hælp!

Hej eksperter,

Jeg sidder med et problem jeg håber I kan hjælpe mig med!
Jeg har en masse filer i formatet txt med en række målinger ud for en dato. Opsætningen er som følger:

Dato        m
01-03-2002    2
10-03-2002    10
03-04-2002    3
06-05-2002    2
17-05-2002    4
01-06-2002    1
[...]
05-04-2003    3
01-05-2003    4   

Der er ingen systematik i afstanden mellem datoerne for målingerne og filerne indeholder målinger for flere år.

Det som jeg gerne vil, er at lave en funktion i Access som henter filen ind med måledata via en browserknap og Windows stifinder. Herefter skal der foretages databehandling (programmeret), idet der skal laves lineær interpolation mellem de enkelte målinger, hvilket skal gøre det muligt at oprette en ny outputfil med daglige interpolerede værdier. Den første dato definerer startdatoen (i eksemplet 01-03-2002) og den sidste slutdatoen (i eksemplet 01-05-2003) for hele outputfilen. Outputfilen vil således skulle indeholde følgende mellem den første og den anden dato.

01-03-2002        2
02-03-2002        2,8
03-03-2002        3,7
04-03-2002        4,6
05-03-2002        5,5
06-03-2002        6,4
07-03-2002        7,3   
08-03-2002        8,2
09-03-2002        9,1
10-03-2002        10

herefter følger så d. 11-03-2003 med en interpolationsværdi af værdien mellem d. 10-03-2003 og d. 03-04-2003 osv. osv. indtil d. 01-05-2003.

Er der nogen som kan hjælpe mig med denne lille problemstilling, jeg står pt. på bar bund.
Jeg vil naturligvis meget gerne donere de point der er nødvendige, så sig endelig til hvad der vil være rimeligt, da jeg ikke helt har fornemmelse for opgavens og hjælpens omfang.

På forhånd tak

Anders
Avatar billede neoman Novice
13. september 2007 - 22:45 #1
1. Hvad er "bar bund" og hvad kan du selv finde ud af at lave ?

Jeg har en access applikation som gør følgende:

a. bruger vælger en eller flere filer ved hjælp af den normale fildialog
b. fil(erne) læses ind
c. de filer som blev indlæst uden fejl, flyttes til en subdirectory, så det er nemt at se hvad der har være behandlet og hvad ikke
d. der laves noget behandling
e. nogle nye filer, svarende til de behandlede udskrives af systemet
f.+ en masse irrelevant andet

Jeg kan skære en fildialog ud til dig og klistre den ind her, men kan ikke hjælpe med andet i aften pga nogle andre commitments:) Får først tid en gang i weekenden.
Avatar billede neoman Novice
13. september 2007 - 22:46 #2
alternativt - vent på mugs eller terry - de huserer her ustandseligt, og er nogle af de mest hjælpsomme individer, som formentligt kan klistre noget sammen til dig i løbet af no time:)
Avatar billede civil05 Nybegynder
13. september 2007 - 23:03 #3
Hej Neoman,

Det lyder da lovende! ang. bar bund så mangler jeg faktisk hele substansen, jeg plejer godt at kunne sammenstykke forskellige koder når de er lavet, men ikke selv skrive dem. så hvis du har mulighed for at klistre dit forslag ind kan jeg lige arbejde lidt med det og så se om det er tilstrækeligt.
Avatar billede neoman Novice
13. september 2007 - 23:12 #4
Se hvad du kan få ud af dette..

Private Sub Kommandoknap25_Click()
' This requires a reference to the Microsoft Office 11.0 Object Library.
Dim myFileName As String

  Dim fDialog As Office.FileDialog
  Dim varFile As Variant

  ' Clear the list box contents.
  'Me.FileList.RowSource = ""

  ' Set up the File dialog box.
  Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
  With fDialog
      ' Allow the user to make multiple selections in the dialog box.
      .AllowMultiSelect = False
           
      ' Set the title of the dialog box.
      .Title = "Vælg en fil"

      ' Clear out the current filters, and then add your own.
      .InitialFileName = [MyPath]
      .Filters.Clear
      .Filters.Add "Manifest Filer", "*.TXT"
      .Filters.Add "Alle Filer", "*.*"

      ' Show the dialog box. If the .Show method returns True, the
      ' user picked at least one file. If the .Show method returns
      ' False, the user clicked Cancel.
  End With

      If fDialog.Show = True Then
        ' Loop through each file that is selected and then add it to the list box.
        For Each varFile In fDialog.SelectedItems
        '    Me.FileList.AddItem varFile
'        MsgBox (varFile)
        If Me.[Shipments underformular].Form.ReadManifest(varFile) = True Then
            Dim fs, f, s
            Set fs = CreateObject("Scripting.FileSystemObject")
            Set f = fs.getfile(CStr(varFile))
            myFileName = fs.GetBaseName(CStr(varFile))
            f.Move [MyPath] & "\Indlæste\"
           
    '        MsgBox (myFileName)
    '        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
    '        "QExport", [MyPath] & "\" & myFileName
                    [Datomanifest] = Now()

        End If
       
        Next
      Else
        MsgBox "Ingen fil indlæst."
      End If

    Set f = Nothing
    Set fs = Nothing
    Set fDialog = Nothing
   

End Sub

Dette her får fat i et filnavn fra brugerens "selection" - men kan stilles til at tage flere ad gangen, kalder noget kode som læser disse filer ind, og hvis det lykkedes så bliver de originale filer flyttet.

Det kører in en access 2003, og ved uklarheder så ville jeg stærkt anbefale brugen af access hjælp (VBA) - der gemmers sig faktisk gode forkalringer/eksempler derinde.

Ved ikke hvor meget du får ud af det, men det er så mit bidrag for i aften.
Avatar billede Slettet bruger
14. september 2007 - 10:31 #5
Du kan prøve at sende din db zippet til spg.eksperten@gmail.com så kan jeg kigge på det. Helt simpelt er det nok ikke, man kan sagtens hente data ind ved en fixed kolonne import og så kan man køre et loop, som opretter manglende datoer.

Så er der lige de interpolerede værdier, der skal man også sidde og hygge sig lidt med et loop, som kan finde start og slut værdier og så hoppe tilbage og udfylde de mellemliggende interpolerede værdier. Så det ville altså tage noget tid!~)
Avatar billede civil05 Nybegynder
14. september 2007 - 23:50 #6
Hej spq,

jeg har endnu ikke oprettet en database da jeg ikke havde nogle ideer til databasen struktur. Men de kommentarer du kommer med lyder meget lovende, så hvis du har mod på det, må du meget gerne prøve at implementere dine kommentarer i en database, det vil virkelig være en stor hjælp! Som sagt har jeg ingen fornemmelse for opgavens omfang så sig til hvor mange points det kræver!
Avatar billede neoman Novice
15. september 2007 - 12:04 #7
Baseret på ovenstående, så har jeg helt misforstået dine ønsker - jeg beklager.

Tricks/tips som hjælp til selvhjælp, og betalt med e-points,  er fint. For en hel opgave så er der for mig nogle andre "points", som er mere relevante. De hedder DKK:)
Avatar billede civil05 Nybegynder
16. september 2007 - 23:12 #8
Det var virkelig ikke meningen, min forespørgsel om hjælp skulle forstås som et forsøg på at betale et job med e-points. Jeg skal ikke trække mere på din tid neoman, undskyld!
Avatar billede civil05 Nybegynder
16. september 2007 - 23:15 #9
Til Spq: Såfremt jeg har presset citronen for meget ved at spørge om du kunne implementere dine kommentarer i en database skriv da endelig tilbage. Jeg vil dog meget gerne have hjælp til denne opgave da den ligger udenfor mine kompetancer.
Avatar billede Slettet bruger
17. september 2007 - 08:36 #10
Jeg nyder meget at kunne hjælpe her på eksperten, da det udvider min kunnen, ved at præsentere mig for nogle problematikker, som jeg ikke umiddelbart ville støde på. Nogle gange sidder jeg så også i en situation, hvor jeg selv er kommet igennem et lignende problem og så føler jeg mig forpligtet til at dele denne viden. Og når jeg sidder med håret i postkassen, så har jeg selv kunnet trække på den kollektive viden, som er til rådighed her....

Jeg vil gerne prøve at hjælpe dig igang, du kunne sende et par af disse tekstfiler, så kan jeg hurtigt lave en importfunktion og generere nogle data, som du kan arbejde med. Det er jo også fint hvis du har det som et lille hygge projekt, men hvis du har tænkt dig at lave et professionelt arbejdsredskab, så er du måske nød til at tænke på hvad det ville være værd for dig og så få en til at lave opgaven.

Lige meget hvad, så er du velkommen til at sende en mail til spg.eksperten@gmail.com eller kigge forbi min hjemmeside www.spgprogramming.com

mvh
spg!~)
Avatar billede civil05 Nybegynder
17. september 2007 - 22:31 #11
Tak for din meget positive tilbagemelding. Jeg sender en mail til dig snarest med et eksempel på datafilen som skal importeres og behandles.
Avatar billede Slettet bruger
18. september 2007 - 14:05 #12
Jeg er lige på kursus idag (SAP!~)
Avatar billede Slettet bruger
20. september 2007 - 12:41 #13
Hvis datoerne er sorteret stigende, der kun er 1 reg. pr. dag og der ikke er nogle tomme poster, så kan flg. klare det!~)

Private Sub UdfyldDato_Click()
On Error Resume Next
Dim d As Date, dd As Date, s As Date, v As Double, x As Double
Dim r As DAO.Recordset
Set r = Form_Eksempel.Recordset
With r
.MoveLast
s = !Dato
.MoveFirst
d = !Dato
Do Until .EOF
If !Dato = d Then
d = d + 1
dd = !Dato
v = !Vol
.MoveNext
Else
x = ((!Vol - v) / (!Dato - dd))
.AddNew
!Dato = d
!Vol = ((d - dd) * x) + v
.Update
d = d + 1
End If
If d = s Then GoTo slut
Loop
slut:
.Close
End With
Me.Eksempel.SourceObject = "eksempel"
MsgBox "Datoer udfyldt og lineær interpolation udført!"
End Sub

eksempel db sendt til civil05...
Avatar billede civil05 Nybegynder
20. september 2007 - 23:03 #14
Hermed velfortjente points til spg!
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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