Jump to content
  • 0

converser temps en h m s


Marc Boucher
 Share

Question

Bonjour,

grace à certains, j'utilise cette formule:

Definir ( [     txt = SupprimerFormatTexte ( SupprimerEspace ( Perf ) ) ;     txt = Si ( EstVide ( Filtre ( txt  ; "cmkgpts" ) ) ; txt ; Substituer ( txt ; "." ; "," ) ) ;       c = Occurrences ( txt ; ":" ) ;     d = Occurrences ( txt ; "." ) ;     mishmash = Si ( d ; Debut ( txt ; Position ( txt ; "." ; 1 ; 1 ) - 1 ) ; txt ) ;     nth = Si ( d ; Fin ( txt ; Longueur ( txt ) - Position ( txt ; "." ; 1 ; Occurrences ( txt ; "." ) ) ) ) ] ;   Cas (     c = 2 ; Remplace ( Remplace ( mishmash ; Position ( mishmash ; ":" ; 1 ; 1 ) ; 1 ; "h" ) ; Position ( mishmash ; ":" ; 1 ; 2 ) ; 1 ; "'" ) ;     c = 1 ; Remplace ( mishmash ; Position ( mishmash ; ":" ; 1 ; 1 ) ; 1 ; "'" ) ;     mishmash   ) & Si ( d ; "\"" & nth ) )

sauf que pour certains résultats j'ai des résultats genre:  138"79 comment les convertir en 2'18"79?

cela peux concerner soit des heures affichées en des minutes ou des minutes en secondes (exemple), dans tous les cas, les secondes " sont indiquées

Merci d'avance

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

résultats genre:

en minute: 138"79 soit = 2'18"79

en heure 176'52" soit = 2h56'52"

Link to comment
Share on other sites

  • 0

Je pense qu'il faut se baser sur Occurrences ( la_chaine ; "'" ). Si on a un ' on fait ci, sinon on fait ça. Non ?

Link to comment
Share on other sites

  • 0

Bonjour Marc,

Tu peux essayer cette formule

Let (
[
	_time = "176'138\"79" ;
	_timeV = Substitute ( _time ; ["\"" ; ¶] ; ["'" ; ¶ ] ) ;
	_h = GetValue ( _timeV ; 1 ) ;
	_m = GetValue ( _timeV ; 2 ) ;
	_s = GetValue ( _timeV ; 3 ) ;
	_m = _m + int ( _s / 60 ) ;
	_s = mod ( _s ; 60 ) ;
	_h = _h + int ( _m / 60 ) ;
	_m = mod ( _m ; 60 )
] ;
	time ( _h ; _m ; _s )
)

un peu testée...sans doute à bétonner

 

Link to comment
Share on other sites

  • 0

@Marc Boucher

J'aimerais bien voir quelques exemples de données que tu reçois en entrée.

@tcolles

Si les heures ne sont pas présentes en entrée (comme dans le 138"79 de Marc), la formule nécessite un aménagement, car elle renvoie en l'état 139h19.

Let (
[
	_time = "138\"79" ;
	_timeV = Substitute ( _time ; ["\"" ; ¶] ; ["'" ; ¶ ] ) ;
	_unit = ValueCount ( _timeV ) ; // 3 if HMS     2 if MS     1 if S
	_h = GetValue ( _timeV ; _unit - 2 ) ;
	_m = GetValue ( _timeV ; _unit - 1 ) ;
	_s = GetValue ( _timeV ; _unit ) ;
	_m = _m + int ( _s / 60 ) ;
	_s = mod ( _s ; 60 ) ;
	_h = _h + int ( _m / 60 ) ;
	_m = mod ( _m ; 60 )
] ;
	time ( _h ; _m ; _s )
)

(un peu testée aussi)

NB : il existe peut-être une fonction pour inverser l'ordre des valeurs d'une liste. Ca remplacerait mon histoire de ValueCount ()…

Link to comment
Share on other sites

  • 0

voici un exemple ou les : représentent tant les heures que les minutes et les secondes n'ont aucune spécificité, pas retrouvé pour heure en minute

Capture d’écran 2022-05-03 à 10.53.32.png

Link to comment
Share on other sites

  • 0

@Jérémie Gimenez les commandes int et mod en francai, c'est quoi svp?

@Marc Boucher vos temps sont 2:28:01 et pas 138"79 ??

En partant de 138"79 , j'ai fait une autre solution, mais pas très académique, j'en conviens. :)

00time.png.aaff6bd1650af190a5bffc41c241036d.png

 

Link to comment
Share on other sites

  • 0
Il y a 5 heures, Apophis000 a dit :

pas très académique, j'en conviens. :)

Pas académique, c'est plutôt un bon point ! 😉

Après, celle de @tcolles a la classe…   🤓

A la place de Tronque ( xxx ; 0 ), tu pourrais avoir Ent ( xxx )

Et la fonction modulo permet d'extraire facilement «les secondes restantes une fois qu'on a pris les paquets de 60 entiers» (puis de même pour les minutes).

Link to comment
Share on other sites

  • 0

je n'ai pas retrouvé l'exemple, mais si mes souvenirs sont bons, c'était durant les Jeux et non dans les résultats définitifs

Link to comment
Share on other sites

  • 0

Bonsoir,

pas sûre de comprendre l’énoncé avec les " et les ', mais si le premier mot sont les heures/minutes et le second, les secondes, dans ce cas n'est il pas mieux de tout convertir en seconde et laisser time faire ?

Let ([

hms = "176'52""" //  "138""79"
];
time ( 0 ; 0 ; LeftWords ( hms ; 1 ) *60 + RightWords ( hms ; 1 ) )
)

et ajouter un test si à un moment il peut n'y avoir qu'un "mot"

Link to comment
Share on other sites

  • 0

Effectivement, les ' sont les minute et " les secondes, sachant que s'il y a une virgule ou un point, cela deviens une distance donc en m avec une virgule entre les mètres et décimètres 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...