Newsgroup: it.comp.lang.delphi
Titolo: Convertire un tempo in un numero, come si fa?

salve a tutti,
    devo convertire un tempo in una stringa del tipo 'nnn:nn:nn' in un
numero reale in questo modo:
le prime 3 cifre rappresentano le ore da 000 a 999
il 4 ed il 5 carattere i minuti
il 6 ed il 7 carattere i secondi
Il numero reale finale deve rappresentare i minuti equivalenti.
Quindi se ad es. la stringa e' : '345:34:20' il minuti sono:
345*60+34+20/60
Come faccio a farmi restituire il valore numerico da una certa posizione
della stringa per fare il calcolo ?
--
Grazie,
           Alex.

Ciao,
ci provo:
var
 ore,min,sec, tuoTempo : string;
 minTotali : real;
begin
 ore := tuoTempo[1]+tuoTempo[2]+tuoTempo[3];
 min := tuoTempo[5]+tuoTempo[6];
 sec := tuoTempo[8]+tuoTempo[9];
 minTotali := (StrToFloat(Ore)*60) + StrToFloat(Min) + (StrToFloat(Sec) / 60)
end;
... + o - dovrebbe andare!!
ciao,
Alan
---
Questo servizio e' realizzato con Wappi della Virtex
Connetti ad internet il tuo telefonino: 
http://www.wappi.com/
--
Posted from [194.243.91.36] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

della stringa per fare il calcolo ?
program TimeConv ;
{ (C)2000 Andrea Laforgia }
{ $APPTYPE CONSOLE        }
uses SysUtils ;
type TTimeStrTokenType = (TK_NUMBER, TK_COLON, TK_EOS, TK_INVALID) ;
     TTimeStrToken = record
                       case Kind : TTimeStrTokenType of
                          TK_NUMBER : (dValue : double) ;
                     end ;
function TimeStrToDouble(TimeStr : string) : double ;
var CurrToken : TTimeStrToken ;
    iCurrState : integer ;
    dHours : double ;
    dMins : double ;
    dSecs : double ;
   function NextToken : TTimeStrToken ;
   var Txt : string ;
   begin
     while (TimeStr <> '') and (TimeStr[1] = ' ') do
       delete(TimeStr, 1, 1) ;
     if (TimeStr <> '') then
     begin
       if (TimeStr[1] in ['0'..'9']) then
       begin
         Result.Kind := TK_NUMBER ;
         Result.dValue := 0.0 ;
         Txt := '' ;
         while (TimeStr <> '') and
               (TimeStr[1] in ['0'..'9']) do
         begin
           Txt := Txt + TimeStr[1] ;
           delete(TimeStr, 1, 1) ;
         end ;
         Result.dValue := StrToFloat( Txt ) ;
       end
       else
       if (TimeStr[1] = ':') then
       begin
          Result.Kind := TK_COLON ;
          delete(TimeStr, 1, 1) ;
       end
       else
          Result.Kind := TK_INVALID ;
     end
     else Result.Kind := TK_EOS ;
   end ;
begin
  iCurrState := 0 ;
  dHours := 0.0 ;
  dMins := 0.0 ;
  dSecs := 0.0 ;
  while (iCurrState <> 100) do
  begin
    CurrToken := NextToken() ;
    case iCurrState of
        -1 : Result := -1 ;
         0 : case CurrToken.Kind of
                  TK_NUMBER : begin
                                dHours := CurrToken.dValue ;
                                iCurrState := 1 ;
                              end ;
             else
               iCurrState := -1 ;
             end ;
         1 : case CurrToken.Kind of
                  TK_EOS : begin
                             dMins := dHours ;
                             dHours := 0 ;
                             iCurrState := 99 ;
                           end ;
                  TK_COLON : iCurrState := 2 ;
             else
               iCurrState := -1 ;
             end ;
         2 : case CurrToken.Kind of
                  TK_NUMBER : begin
                                dMins := CurrToken.dValue ;
                                iCurrState := 3 ;
                              end ;
             else
               iCurrState := -1 ;
             end ;
         3 : case CurrToken.Kind of
                  TK_EOS : begin
                             dSecs := dMins ;
                             dMins := dHours ;
                             dHours := 0 ;
                             iCurrState := 99 ;
                           end ;
                  TK_COLON : iCurrState := 4 ;
             else
               iCurrState := -1 ;
             end ;
         4 : case CurrToken.Kind of
                  TK_NUMBER : begin
                                dSecs := CurrToken.dValue ;
                                iCurrState := 99 ;
                              end ;
             else
               iCurrState := -1 ;
             end ;  
        99 : if (CurrToken.Kind = TK_EOS) then
             begin
               Result := dHours * 60.0 + dMins + dSecs/60.0 ;
               iCurrState := 100 ;
             end
             else iCurrState := -1 ;
    end ;
  end ;
end ;
begin
  writeln( TimeStrToDouble( '2:10:30' ):10:5 ) ; // hh:mm:ss
  writeln( TimeStrToDouble( '2:30' ):10:5 ) ;    // mm:ss
  writeln( TimeStrToDouble( '2' ):10:5 ) ;       // mm
  readln ;
end.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------
#exclude <windows.h>

numero reale in questo modo:
[...]
function TimeToMins(TimeEx: string): double;
var
  TmpStr: string;
  EqMins: double;
  P: LongInt;
begin
 EqMins:= 0;
 // --- ORE ---
 P:= Pos(':',TimeEx);
 if P=0 then
   raise Exception.Create('Bad time format');
 TmpStr:= Copy(TimeEx,1,P-1);
 TimeEx:= Copy(TimeEx,P+1,Length(TimeEx)-P);
 try
   EqMins:= EqMins+StrToInt(TmpStr)*60;
 except
   raise Exception.Create('Bad time format');
 end;
 // --- MINUTI ---
 P:= Pos(':',TimeEx);
 if P=0 then
   raise Exception.Create('Bad time format');
 TmpStr:= Copy(TimeEx,1,P-1);
 TimeEx:= Copy(TimeEx,P+1,Length(TimeEx)-P);
 try
   EqMins:= EqMins+StrToInt(TmpStr);
 except
   raise Exception.Create('Bad time format');
 end;
 // --- SECONDI ---
 try
   EqMins:= EqMins+StrToInt(TimeEx)/60;
 except
   raise Exception.Create('Bad time format');
 end;
 TimeToMins:= EqMins;
end;
Ciao,
-=SIMO=-

Spero che non l'hai scritto apposta, altrimenti capisco perchč a Roma non
funziona niente ;-)
Andrea Laforgia wrote:

--
Massimo
l.sky...@iname.com
------------------------
Che la forza sia con te!
------------------------

 end;
La funzione che non conoscevo era COPY, molto potente e flessibile!
Il passaggio da VB a Delphi ne vale la pena!
--
Grazie,
           Alex.

 end.
--
Grazie,
           Alex.

terro' il codice da parte.
Figurati ;)


 wrote in message
o55ems4ampuac9957...@4ax.com...
