Newsgroup: it.comp.appl.access
Titolo: Formato dati

Devo caricare dati esterni provenienti da un file.txt.
Essi sono rappresentati in questo modo:
........(per maggior chiarezza.... sono dati provenienti da un dispositivo
hardware che serve a prendere tempi in gare sportive; tramite Windows
Hyperterminal riesco a collegarlo al PC e con una serie di comandi i tempi
di gara mi vengono rappresentati in questo modo....
000-01234587-999
000-01324466-999
....sottoforma di file di testo).
Immaginiamo che ognuna delle righe sia un record composto da tre
campi(separati dal trattino)
1° campo: n° concorrente;
2° campo: tempo impiegato(hh.mm.ss,cc);
3° campo: n° gara.
Il primo e il terzo campo possono anche non interessarmi, il secondo è
importantissimo...
Con la funzione carica dati esterni Importa dati vado direttamente a crearmi
la tabella in Access e effettivamente ottengo i miei tre campi...
Dov'è il problema???
Mentre per il 1° e il 3° il formato numerico o di testo mi vanno bene, per
il 2° il numerico o il testo non mi permettono (o non sono capace) di
rappresentare il dato in questo modo: 01.23.45,87 (hh.mm.ss,centesimi).
Come devo fare secondo voi per poter fare in modo che poi questi dati
possano essere stampati con un report.
Vi straringranzio finora per l'aiuto.
Luca.

 possano essere stampati con un report.
    Debug.Print Format$(1234587, "00\.00\.00\,00")
OUTPUT:
    01.23.45,87
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 01.93.78,00
    Perche' le operazioni le devi fare passando attraverso la conversione in
centesimi di secondo.
    Ti faccio un esempio, che e' anche qualcosina piu' di un esempio:
Public Sub Test()
  Dim lTimeAsLong   As Long
  Dim lTimeAsLong1  As Long
  Dim lTimeAsLong2  As Long
  lTimeAsLong = 11042308
  lTimeAsLong1 = 1344400
  lTimeAsLong2 = 593400
  Debug.Print "Conversione da Long a Centesimi di secondo"
  Debug.Print "e riconversione per verifica:"
  Debug.Print
  Debug.Print _
      FormatLongAsCSec(lTimeAsLong) _
    , CSecFromLong(lTimeAsLong) _
    , FormatLongAsCSec(LongFromCSec(CSecFromLong(lTimeAsLong)))
  Debug.Print
  Debug.Print
  Debug.Print "Somma:"
  Debug.Print
  lTimeAsLong _
    = LongFromCSec( _
          CSecFromLong(lTimeAsLong1) _
        + CSecFromLong(lTimeAsLong2))
  Debug.Print FormatLongAsCSec(lTimeAsLong1); " + ";
  Debug.Print FormatLongAsCSec(lTimeAsLong2); " = ";
  Debug.Print FormatLongAsCSec(lTimeAsLong)
End Sub
Public Function CSecFromLong( _
  ByVal TimeAsLong As Long _
) As Long
  Const c_sFormat = "00000000"
  Dim sTimeAsLong As String
  sTimeAsLong = Format$(TimeAsLong, c_sFormat)
  CSecFromLong _
    = CLng(Mid$(sTimeAsLong, 1, 2)) * 360000 _
    + CLng(Mid$(sTimeAsLong, 3, 2)) * 6000& _
    + CLng(Mid$(sTimeAsLong, 5, 2)) * 100& _
    + CLng(Mid$(sTimeAsLong, 7, 2))
End Function
Public Function FormatLongAsCSec( _
  ByVal TimeAsLong As Long _
) As String
  Const c_sFormat = "00\.00\.00\,00"
  FormatLongAsCSec = Format$(TimeAsLong, c_sFormat)
End Function
Public Function LongFromCSec( _
  ByVal TimeAsCSec As Long _
) As Long
  Const c_sFormat = "00"
  Dim lHH   As Long
  Dim lMM   As Long
  Dim lSS   As Long
  Dim lCC   As Long
  lCC = TimeAsCSec
  lHH = lCC \ 360000
  lCC = lCC - lHH * 360000
  lMM = lCC \ 6000&
  lCC = lCC - lMM * 6000&
  lSS = lCC \ 100&
  lCC = lCC - lSS * 100&
  LongFromCSec _
    = CLng( _
          Format$(lHH, c_sFormat) _
        & Format$(lMM, c_sFormat) _
        & Format$(lSS, c_sFormat) _
        & Format$(lCC, c_sFormat))
End Function
OUTPUT:
Conversione da Long a Centesimi di secondo
e riconversione per verifica:
11.04.23,08    3986308      11.04.23,08
Somma:
01.34.44,00 + 00.59.34,00 = 02.34.18,00
