Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1559 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme sur calcul de temps

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

probleme sur calcul de temps

n°763899
bombyce
Posté le 15-06-2004 à 10:49:20  profilanswer
 

Bonjour.
 
10/01/04,00:07:45;080,02;Ko.                       (1)
10/01/04,00:08:58;080,02;Ok,ReceptionDM.           (2)
 
 
ci dessus les 2 lignes extraites du fichier.
 
je recupere les differents champs de la ligne1 et de la ligne2 afin de verifier leur compatibilitees. Puis je voudrais effectuer un calcul de difference de temps entre les 2 lignes. mais la je suis bloque.
J'ai d'abord essayer avec difftime mais je n'arrive pas a la mettre en oeuvre et ne sais pas si cela convient a ce que je veux effectuer (sachant que je veux ensuite inclure le resultat dans un fichier (ce resultat devant se trouver au milieu d'une chaine de caracteres))
 
j'ai pense faire un parcours de la ligne a partir de la premiere virgule et jusqu'a un indice valant 8, afin de mettre chaque caracteres dans un tableau puis pareil pour la 2 ieme lignes et pour finir une soustraction ( (2) - (1) ).
 
voila mon code :(pour la 1ere ligne)
char *calculTemps(int ind1,int ind2,char *chaine){
char *resultat;
 
int i,j;
ind2 = 8;
i=0;
j=ind1;
resultat=malloc(100);
strchr(phras,',');
 while (j <= ind2){
  tab[i] = chaine [j];
  i++;
  j++;
 }
strcpy(resultat,tab);
 
}return resultat;
 
 
 j' ai besoin d'aide.  :??:  
 
Merci a tous ceux qui liront mon post et surtout un un grand merci a ceux qui vont m'eclairer. :jap:

mood
Publicité
Posté le 15-06-2004 à 10:49:20  profilanswer
 

n°763940
Taz
bisounours-codeur
Posté le 15-06-2004 à 11:08:11  profilanswer
 

tu peux arrêter de poser 36 fois la même question ?

n°763952
bombyce
Posté le 15-06-2004 à 11:13:04  profilanswer
 

c la meme question certes mais la derniere fois j'avais pose plusieur question est celle ci avait ete completement zappe.
J'ai refait un post non pas par impatience mais plutot pour que ceux qui vont lire mon post n'ai pas a lire tout ce que l on ma conseille concernant les autres questions.
C 'etait pout plus de clarte. Je pensais pas enerver.


Message édité par bombyce le 15-06-2004 à 11:14:15
n°763954
Hermes le ​Messager
Breton Quiétiste
Posté le 15-06-2004 à 11:14:46  profilanswer
 

Bombyce a écrit :

Je pensais pas enerver.


 
Avec Taz, ne pas "énerver", c'est une quête d'absolu...  :D


Message édité par Hermes le Messager le 15-06-2004 à 11:14:57
n°763958
bombyce
Posté le 15-06-2004 à 11:17:06  profilanswer
 

LOL
mais bon, c'est pas ça qui va m'aider.
 
A+

n°765328
bombyce
Posté le 16-06-2004 à 10:00:32  profilanswer
 

bon probleme regle.
 
A+

n°765339
el muchach​o
Comfortably Numb
Posté le 16-06-2004 à 10:03:10  profilanswer
 

Tu as fait comment ?

n°765914
bombyce
Posté le 16-06-2004 à 15:28:52  profilanswer
 

Je pensai mon probleme completement regle mais j'ai encore quelques petites erreurs.
 
J'ai recuperer les champs contenant les heures , les min , les secondes.
avec:

Code :
  1. char *buff11;
  2. |
  3. |
  4. fgets(caracteres,TAILLE-1,lignes);
  5. HEURE_1=calculTemps(9,10,caracteres);
  6. //dont le corps est :
  7. char *calculTemps(int ind1, int ind2, char phras[TAILLE] ){
  8. char tab[TAILLE]="init";
  9. char *resultat;
  10. int j,i;
  11. i=0;
  12. j = ind1;
  13. resultat=malloc(100);
  14. while (j <= ind2){
  15. tab[i] = phras[j];
  16. i++;
  17. j++;
  18. }
  19. tab[i]='\0';
  20. strcpy(resultat,tab);
  21. return (resultat);
  22. }


 
je fais ce traitement sur une ligne1,je change de ligne puis refais le meme traitement avec la ligne2.
ensuite il faut effectuer le calcul de la difference entre HEURE_1 et HEURE_2 .
 
Pour cela il faut que faire une conversion en 'int'.
j'utilise la fonction atoi,mais la j'ai un probleme.
 

Code :
  1. buf11=HEURE_1 ;
  2. resultat1= atoi (buf11);


 
idem pour la ligne2:
 

Code :
  1. buf21=HEURE_2 ;
  2. resultat1= atoi (buf21);


 
et la , j'ai des erreurs ,je dois mal utilise 'atoi' . :pt1cable:  
Pouvez vous m'aider? :??:  
 
A+


Message édité par bombyce le 16-06-2004 à 15:29:38
n°765928
Taz
bisounours-codeur
Posté le 16-06-2004 à 15:37:48  profilanswer
 

atoi ne te permet pas de détecter des erreurs. utilise strtol / strtoul

n°766058
mirascheat
Posté le 16-06-2004 à 16:29:55  profilanswer
 

le atoi("Taz" ) marche aléatoirement, ca dépend de son humeur lol :-)

mood
Publicité
Posté le 16-06-2004 à 16:29:55  profilanswer
 

n°766367
bombyce
Posté le 16-06-2004 à 19:27:53  profilanswer
 

Daccord TAz je vais suivre ton conseil.
 
A+
 
p.s : je vois souvent le nom d un livre (T&K).
Pourriez vous me donner son nom complet , l'editeur/la collection et si possible son prix.
Merci.

n°766379
Taz
bisounours-codeur
Posté le 16-06-2004 à 19:34:55  profilanswer
 

K&R
 
Kernighan & Ritchie

n°766767
bombyce
Posté le 17-06-2004 à 09:48:51  profilanswer
 

OK merci
 
A+

n°766913
bombyce
Posté le 17-06-2004 à 11:05:29  profilanswer
 

ça marche nikel mais ensuite pour concatennerle reultat du calcul au reste des données misent dans le fichier je dois zeffectuer une conversion inverse c'est a dire transformer un int en caractere.
Existe t il une autre fonction que 'itoa'?
(Comme elle ressemble beaucoup a atoi, je me demande si elle ne serait pas deconseille elle aussi).
 
Merci pour votre aide.
 
A+  

n°766917
Taz
bisounours-codeur
Posté le 17-06-2004 à 11:07:47  profilanswer
 

non. utilise sprintf

n°767279
bombyce
Posté le 17-06-2004 à 14:12:21  profilanswer
 

pourrais tu m'expliquer ou est mon erreur:
 
je fais ce code:
 

Code :
  1. void transforme(char phras[TAILLE]){
  2. char *temp;
  3. //etude de la ligne
  4. //traitement date  
  5.    recupmot(',',phras,1);
  6.    strcat(phrase,"," );
  7. //traitement temps  
  8.    temp=strchr(temp,',');
  9.    sprintf(phrase, "%s" ,dureeHeures);
  10.    strcat(phrase,":" );
  11.    sprintf(phrase, "%s" ,dureeMinutes);
  12.    strcat(phrase,":" );
  13.    sprintf(phrase, "%s" ,dureeSecondes);
  14.    strcat(phrase,";" );
  15. //traitement du noeud      
  16.    temp=strchr(temp,';');
  17.    recupmot(',',temp,0);
  18.    strcat(phrase,"," );
  19. //traitement de la ligne
  20.    temp=strchr(temp,',');
  21.    recupmot(';',temp,0);
  22.    strcat(phrase,"." );
  23.    strcat(phrase,"\n" );
  24. }


exemple de ce que je veux avoir pour resultat:  
0/01/04,00:09:24;080,02.


Message édité par bombyce le 17-06-2004 à 14:12:56
n°767353
cricri_
Posté le 17-06-2004 à 14:27:20  profilanswer
 

si tu fais du sprintf après du strcat, t'as écrasé tout ce qu'il y avait précédemment ..
 
n'utilise que sprintf(), en faisant un truc du genre :
 
char *p = phrase;
 
p += sprintf( p, ...);

n°767374
Taz
bisounours-codeur
Posté le 17-06-2004 à 14:36:34  profilanswer
 

c'est une blague ce truc ?
 
sprintf(phrase, "%s" ,dureeHeures);
        strcat(phrase,":" );
        sprintf(phrase, "%s" ,dureeMinutes);
        strcat(phrase,":" );
        sprintf(phrase, "%s" ,dureeSecondes);
        strcat(phrase,";" );  
 
 ?

n°767449
bombyce
Posté le 17-06-2004 à 15:03:41  profilanswer
 

Voila mon code avec les 'sprintf' mais je comprends pas ou est mon erreurs car mon prog plante a l'execution quand j'arrive a ce code. :pt1cable:  
 
 

Code :
  1. /*******traitementChaineDeCaractere**********/
  2. void transforme(char phras[TAILLE]){
  3. char *temp;
  4. //etude de la ligne
  5. //traitement date  
  6.      recupmot(',',phras,1);
  7.      sprintf(phrase,"," );
  8. //traitement temps  
  9.      sprintf(phrase, "%s" ,dureeHeures);
  10.      sprintf(phrase,":" );
  11.      sprintf(phrase, "%s" ,dureeMinutes);
  12.      sprintf(phrase,":" );
  13.      sprintf(phrase, "%s" ,dureeSecondes);
  14.      sprintf(phrase,";" );
  15. //traitement du noeud      
  16.      temp=strchr(temp,';');
  17.      recupmot(',',temp,0);
  18.      sprintf(phrase,"," );
  19. //traitement de la ligne
  20.      temp=strchr(temp,',');
  21.      recupmot(';',temp,0);
  22.      sprintf(phrase,"." );
  23.      sprintf(phrase,"\n" );
  24. }
  25. /*******************recupmot*******************/
  26. //fonction pour retourner un mot
  27. void recupmot(char fin, char *phras,int type){
  28. char mot[TAILLE]="init";
  29. int i,j;
  30. j=0;
  31. if(type==1)
  32. i=0;
  33. else
  34. i=1;
  35. while(phras[i]!=fin)
  36. {
  37. mot[j]=phras[i];
  38. j++;
  39. i++;
  40. }
  41. mot[j]='\0';
  42. if(type==0)
  43. sprintf(phrase,mot);
  44. else
  45. strcpy(phrase,mot);
  46. }


 
 
 
Pouvez vous m'expliquer? :jap:  
 
A+

n°767553
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 17-06-2004 à 15:36:10  profilanswer
 

Bombyce a écrit :

Voila mon code avec les 'sprintf' mais je comprends pas ou est mon erreurs car mon prog plante a l'execution quand j'arrive a ce code. :pt1cable:  
 
 
sprintf(phrase, "%s", mot);
 
 
 
Pouvez vous m'expliquer? :jap:  
 
A+


 
Et ensuite c'est phrase ou phras le nom de ta chaine?


Message édité par fodger le 17-06-2004 à 15:37:29
n°767611
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 17-06-2004 à 15:58:02  profilanswer
 

Quelle est la valeure de taille? Ensuite pqoi tu cumules les sprintf quand tu peux tout faire en une instruction?

n°767978
cricri_
Posté le 17-06-2004 à 18:46:58  profilanswer
 

vi, c'est n'importe nawak ça ...
Et temp qui pointe sur queud, tu m'étonne que ça vautre ...  :non:

n°768115
red factio​n
Posté le 17-06-2004 à 22:32:20  profilanswer
 

c la fete ici :D
 
ta raison met des sprintf le programme va plus vite

n°768143
el muchach​o
Comfortably Numb
Posté le 17-06-2004 à 23:25:18  profilanswer
 

On s'en fout ici, de la vitesse. Le programme ne marche pas et ne risque pas de marcher avant un moment vu comme il est gaulé.

n°768163
red factio​n
Posté le 18-06-2004 à 00:11:25  profilanswer
 

el muchacho a écrit :

On s'en fout ici, de la vitesse. Le programme ne marche pas et ne risque pas de marcher avant un moment vu comme il est gaulé.


 
il a rien compris  [:yamusha]

n°768265
bombyce
Posté le 18-06-2004 à 08:34:28  profilanswer
 

eho on se calme je debute, ça fait mainteneant a peu pres 4 semaines que je fais du C...
alors un peu d'indulgence et montrez moi un exemple de 'sprintf'

n°768298
cricri_
Posté le 18-06-2004 à 09:20:22  profilanswer
 

Code :
  1. sprintf( phrase, "%s:%s:%s.\n", dureeHeures, dureeMinutes, dureeSecondes);


En supposant que tes variables dureeTruc soit déjà des chaines, si ce sont des entiers faut utiliser %d

n°768302
bombyce
Posté le 18-06-2004 à 09:24:45  profilanswer
 

Mon dieu que je suis C.. , ahlala j'ai l'impression d'etre un boulet avec mes questions idiotes.

n°768304
Taz
bisounours-codeur
Posté le 18-06-2004 à 09:26:28  profilanswer
 

duree* c'est bien des char* ou assimilés ?

n°768315
bombyce
Posté le 18-06-2004 à 09:34:19  profilanswer
 

Ce sont des int car j'ai d'abord effectuer une conversion de la chaine de caracteres que j'ai recupere precedement afin de pouvoir effectuer un calcul numerique.
J'ai tous d'abord cru que je devais ensuite effectuer une nouvelle conversion des int en char afin de pouroir les concatener a la suite des autre elements.
 
Mais 'dapres ce que je comprends ds messages precedents avec sprintf ,il n'y a pas besoin d'effectuer une conversion.
Je me trompe ?
 
A+

n°768323
Taz
bisounours-codeur
Posté le 18-06-2004 à 09:40:06  profilanswer
 

... ben alors le format il est pas bon :o
 
%d :o

n°768352
cricri_
Posté le 18-06-2004 à 10:00:27  profilanswer
 

Vi, dans sprintf faut tout de même que tu lui donne le format dans lequel tu veux qu'il te traite variable pour qu'il fasse le boulot ...

n°768356
bombyce
Posté le 18-06-2004 à 10:01:12  profilanswer
 

Peut on combiner des sprintf et des strcat?
 
car avec une fonction 'recupmot' je recuperes des mots  :D  , puis fait une copie, ensuite je concatene les elements suivant a la suite.
 
Mais pour rajouter les elements de calcul je dois utiliser sprintf et la mon programme plante et cela juste quand arrive le deuxieme recupmot qui utilise un strcat.
 
 

Code :
  1. void transforme(char phras[TAILLE]){
  2. char *temp;
  3. recupmot(',',phras,1);
  4. strcat(phrase,"," );
  5. temp=strchr(temp,',');
  6. sprintf( phrase, "%d:%d:%d;\n", dureeHeures, dureeMinutes, dureeSecondes);
  7. recupmot(',',temp,0);    //ici cela plante
  8. strcat(phrase,"," );
  9. temp=strchr(temp,',');
  10. recupmot(';',temp,0);
  11. strcat(phrase,"." );
  12. strcat(phrase,"\n" );
  13. }


Message édité par bombyce le 18-06-2004 à 10:02:56
n°768361
Taz
bisounours-codeur
Posté le 18-06-2004 à 10:03:43  profilanswer
 

aucun intérêt

n°768364
cricri_
Posté le 18-06-2004 à 10:04:14  profilanswer
 

je t'ai déjà répondu là dessus ...
 

Citation :

char *p = phrase;
 
p += sprintf( p, ...);


 

Citation :

Et temp qui pointe sur queud, tu m'étonne que ça vautre ...  

n°768935
bombyce
Posté le 18-06-2004 à 13:26:24  profilanswer
 

Merci pour votre patience.  
Et j'avais bien vu ton precedent post mais etais reste bloque sur mon idee qui etait d'ailleur une idee de merde puisque ça marche pas.
Enfin bon maintenant ça marche. Du moins ça ne plante plus.
 
A+

n°772779
bombyce
Posté le 22-06-2004 à 14:46:16  profilanswer
 

Voici une partie de mon code pour trier les lignes d un fichier texte.
exmple de lignes:
10/01/04,00:07:45;080,02;Ko.
10/01/04,00:08:58;080,02;Ok,ReceptionDM.
10/01/04,00:09:24;080,02;Ko,PasDeReponseSurLiaison.
10/01/04,00:09:32;080,02;Ok,ReceptionDM.
10/01/04,00:09:42;080,02;Ko,ExcesRetransmission.
10/01/04,00:09:49;080,02;Ok,ReinitLiaison.
 
 

Code :
  1. parcour2 = 1;
  2. parcour1 = 0;
  3. fgets(caracteres,TAILLE-1,lignes);
  4. do{
  5.    test1=strstr(caracteres,"Ok" );
  6.      if( parcour2==1){
  7. if(test1==NULL){
  8.          transforme1(caracteres);
  9.   buffer11=calculTemps(9,10,caracteres);       HEURES_1=strtol(buffer11,0,10);
  10.  buffer12=calculTemps(12,13,caracteres); 
  11.  MINUTES_1=strtol(buffer12,0,10);
  12.  buffer13=calculTemps(15,16,caracteres);            SECONDES_1=strtol(buffer13,0,10);
  13.                 JOURS_1=strtol(calculTemps(0,1,caracteres),0,10);     MOIS_1=strtol(calculTemps(3,4,caracteres),0,10);
  14.  ANNEES_1=strtol(calculTemps(6,7,caracteres),0,10);
  15.  parcour1 = 1;
  16.   fgets(caracteres,TAILLE-1,lignes);     test2=strstr(caracteres,"Ko" );
  17. }
  18.      }
  19.      if (parcour1 == 1){
  20. if (test2 == NULL) {
  21.    transforme2(caracteres);         buffer21=calculTemps(9,10,caracteres);
  22.    HEURES_2=strtol(buffer21,0,10);
  23.    buffer22=calculTemps(12,13,caracteres);
  24.    MINUTES_2 =strtol(buffer22,0,10);
  25.    SECONDES_2 =strtol(calculTemps(15,16,caracteres),0,10);     JOURS_2 = strtol(calculTemps(0,1,caracteres),0,10);
  26.    MOIS_2 = strtol(calculTemps(3,4,caracteres),0,10);
  27.            ANNEES_2 = strtol(calculTemps(6,7,caracteres),0,10);
  28.               if((strcmp(DATE1,DATE2)==0)&&(strcmp(NUMNOEUD1,NUMNOEUD2)==0)&& (strcmp(NUMLIGNE1,NUMLIGNE2)==0)){   
  29.  dureeHeures = HEURES_2 - HEURES_1 ;     dureeMinutes = MINUTES_2 - MINUTES_1 ;
  30.  dureeSecondes = SECONDES_2 - SECONDES_1 ;
  31.  dureeJours = JOURS_2 - JOURS_1;
  32.  dureeMois = MOIS_2 - MOIS_1;
  33.  dureeAnnees = ANNEES_2 - ANNEES_1;
  34.  p +=sprintf(p,"%s , ",DATE1);      p +=sprintf( p, "%d:%d:%d ; ", dureeJours, dureeMois, dureeAnnees);
  35.         p +=sprintf( p, "%d:%d:%d ; ", dureeHeures, dureeMinutes, dureeSecondes);
  36.  p +=sprintf(p,"%s , ",NUMNOEUD1);
  37.  p +=sprintf(p,"%s , ",NUMLIGNE1);
  38.  if (test5 != NULL){        p +=sprintf(p,"%s . \n",CAUSE2);    }
  39.  fputs(phrase,duree);       parcour2 = 1;
  40.  fgets(caracteres,TAILLE-1,lignes);
  41.     }else{
  42.           if (strcmp(DATE1,DATE2)!=0){
  43.   if((temporaire=fopen(temporaire_fic,"wt" ))==NULL){
  44.    printf("\n Erreur d'ouverture du fichier %s",nomfich);
  45.   }else{
  46.    transformeCasParticulier(caracteres);     fputs(phrase,temporaire);
  47.   }
  48.           }
  49.  parcour2 = 0;        fgets(caracteres,TAILLE-1,lignes);
  50.  test2=strstr(caracteres,"Ko" );
  51.      }
  52.         }
  53.     }
  54. }while(fgets(caracteres,TAILLE-1,lignes)!= NULL)

 
 
 
Mon probleme est que je recupere dans le fichier definitif une repetitions des lignes precedentes, c'est a dire :
 
10/01/04 , 0:0:0 ; 0:1:13 ; 080 , 02 , ReceptionDM .  //1er resultat
10/01/04 , 0:0:0 ; 0:1:13 ; 080 , 02 , ReceptionDM .  //1er resultat
10/01/04 , 0:0:0 ; 0:0:8 ; 080 , 02 , ReceptionDM .   //2eme resultat
10/01/04 , 0:0:0 ; 0:1:13 ; 080 , 02 , ReceptionDM .  //1er resultat
10/01/04 , 0:0:0 ; 0:0:8 ; 080 , 02 , ReceptionDM .   //2eme resultat
10/01/04 , 0:0:0 ; 0:0:7 ; 080 , 02 , ReinitLiaison   //3eme resultat
 
 
J'imagine faire une erreur de parcour avec mes boucles mais ça fait un moment que je cherche et je bloque  :cry:  
J'abuse peut etre de donner une partie de mon code comme ça et d'esperer que vous trouverez mon/mes erreur(s) mais la je seche vraiment et ça me prend la tete. :pt1cable:  
Merci de votre aide.


Message édité par bombyce le 22-06-2004 à 14:54:31
n°772785
Taz
bisounours-codeur
Posté le 22-06-2004 à 14:49:29  profilanswer
 

déjà jète ton feof de merde qui marchera jamais
 
while(fgets() != NULL)  
{
 // action
}

n°772798
bombyce
Posté le 22-06-2004 à 14:56:09  profilanswer
 

bon c modifie  
mais une petite question, si je fais :
while((fgets(caracteres,TAILLE-1,lignes)!= NULL){  
//action
}
 
cela va t il me faire changer de ligne?

n°772883
Taz
bisounours-codeur
Posté le 22-06-2004 à 16:00:18  profilanswer
 

sizeof caractères et pas TAILLE-1
 
ça va pas te faire changer de ligne sytématiquement, ça va lire jusqu'à TAILLE-1 caractères, '\n' compris si la fin de ligne a été atteinte, et ça mettra __toujours__ un 0 final

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme sur calcul de temps

 

Sujets relatifs
Problème Connexion BDD (ASP) [Résolu][ Access ] Problème de sécurité avec base en réseau
Problème liaison Javascript/PHP [Résolu]Probleme avec Dreamweaver
probleme de requeteProbleme de date....
problème access comprend pasprobleme de couleur alpha en opengl
[gl4java - Java]Problème de picking avec gl4java[ HTML ] formulaire, élément input type="image" --> Problème
Plus de sujets relatifs à : probleme sur calcul de temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR