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

  FORUM HardWare.fr
  Programmation
  C

  conversion chaine de caractere / en numerique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

conversion chaine de caractere / en numerique

n°757445
bombyce
Posté le 09-06-2004 à 08:51:22  profilanswer
 

Bonjour, je suis actuellement en stage et j'ai comme projet d effectuer un traitement sur des fichiers textes. Mais voila que les pb commences.
 
exemple de 2 lignes du fichier:
 
10/01/04,00:07:45;080,02;Ko.
10/01/04,00:08:58;080,02;Ok,ReceptionDM.
 
codage deja effectue :
void main ...
 
|
|
|
 
FILE *temporaire;
FILE *lignes;
FILE *duree;
FILE *casParticulier;
char nomfich[20],*test2,*test1,*mot1,*mot2,*temp,*temp1,*fin,*phras;
char caracteres[TAILLE];
int nblignes,i,z;
double retablissement;
 
char temporaire_fic[500]="TEMPORAIRE_";
char duree_fic[500]="DUREE_";
 
do{
 test1=strstr(caracteres,"Ok" );
     
 if(test1==NULL){  
 transforme1(caracteres);
        fgets(caracteres,TAILLE-1,lignes);
        test2=strstr(caracteres,"Ko" );
       
       
 if (test2==NULL){
 
  transforme2(caracteres);    
  if((strcmp(DATE1,DATE2)==NULL)&&(strcmp(NUMNOEUD1,NUMNOEUD2)==NULL)&& (strcmp(NUMLIGNE1,NUMLIGNE2)==NULL)){
                                                                       //fonctionne pas.     retablissement=difftime(date2,date1);
                  transforme(caracteres);
           fputs(phrase,duree);
 
  }else{
   if(DATE1==DATE2){
    fgets(caracteres,TAILLE-1,lignes);
    test2=strstr(caracteres,"Ko" );      while(test2==NULL){  
    fgets(caracteres,TAILLE-1,lignes);}
   }else{
    if ((temporaire=fopen(temporaire_fic,"wt" ))==NULL){
          printf("\n Erreur d'ouverture du fichier temporaire" );
                                 }else{
     transformeCasParticulier(caracteres);
     fputs(phrase,temporaire);
    }    
   }
  }  
   }else{
    fgets(caracteres,TAILLE-1,lignes);}
  }else{
   fgets(caracteres,TAILLE,lignes);   }while(!feof(lignes));  
 }fclose(duree);
  fclose(temporaire);
 }printf("\n fermeture du fichier duree" );
}
 
 
 
codage des fonctions:

//transforme1 et transforme2 sont identiques

void transforme1(char phras[TAILLE]){
char *temp1;
//etude de la ligne
 
       
  DATE1=recupmot1(',',phras,1);
  temp1 = strchr(phras,',');
  HEURE1 = recupmot1(';',temp1,0);
  temp1 = strchr(temp1,';');
  NUMNOEUD1 = recupmot1(',',temp1,0);
                temp1 = strchr(temp1,',');
                NUMLIGNE1 = recupmot1(';',temp1,0);
                strchr(temp1,';');
  strcat(phrase,"\n" );
}
 

//Recupmot1 et recupmot 2 sont identiques.

/*******************recupmot1*******************/
 
//fonction pour retourner un mot pour les test
 
 
char *recupmot1(char fin, char *phras,int type){
char mot1[TAILLE]="init";
char *test1;
 
int i,j;
 
test1=malloc(100);   //pour affacter une taille memoire et une adresse
j=0;
if(type==1)
 i=0;
else
 i=1;
while(phras[i]!=fin)
{
 mot1[j]=phras[i];
 j++;
 i++;
 
}mot1[j]='\0';
 
strcpy(test1,mot1);
 
return(test1);
}
 
 
 
 
grace a ce code je recupere les differents elements des lignes du fichier.
Mais une fois ce traitement effectuer je cherche a effectuer un calcul de temps de retablissement entre les 2 lignes, or DATE1 et DATE2 sont des chaines de caracteres.
--> comment faire pour les convertir en valeur numerique puis comment utiliser 'difftime' , je ne connais pas la structure de time_t.
Je me prends la tete depuis un moment et j'ai vraiment besoin d'aide sinon je vais   :pt1cable:  
 
Tant que je suis la , y aurait t il une bonne ame qui voudrait bien me dire aussi comment recuperer la date du jour et la mettre ensuite a la suite du nom du fichier et cela chaques fois que l'on ferme le fichier ou le resultat du traitement est insere ?
 
Merci bcp !!!
 
A+


Message édité par bombyce le 09-06-2004 à 09:34:46
mood
Publicité
Posté le 09-06-2004 à 08:51:22  profilanswer
 

n°757457
Moktar1er
No one replies...
Posté le 09-06-2004 à 09:19:01  profilanswer
 

quand on fait "man difftime" on trouve entre autres

Citation :


VOIR AUSSI
       date(1), gettimeofday(2), time(2), ctime(3), gmtime(3), localtime(3)

n°757567
bombyce
Posté le 09-06-2004 à 10:43:08  profilanswer
 

Merci pour ton aide,
maintenant j'arrive a recuperer la date et l'heure mais je n'arrive pas a rajouter ces elements a la suite du nom du fichier.
 
A+

n°757569
Moktar1er
No one replies...
Posté le 09-06-2004 à 10:44:49  profilanswer
 

à grands coups de sprintf ça ne devrait pas poser trop de problèmes [:spamafote]

n°757605
bombyce
Posté le 09-06-2004 à 11:03:45  profilanswer
 

J'y arrive pas.
Je recupere la date, heure avec:
time_t t;
|
|
time(&t);    
printf("\n Affichage : %s", ctime(&t));  
 
et je cree mon fichier :
 
FILE *duree;
char duree_fic[500]="DUREE_";
|
|
duree=fopen(duree_fic,"wt" )
 
 
je pensai que je devais faire une concatenation apres le nom du fichier.
J ai essayer avec sprintf et j'y arrive pas:
sprintf(duree,ctime(&t));
pourrais tu m'expliquer?

n°757619
Moktar1er
No one replies...
Posté le 09-06-2004 à 11:08:19  profilanswer
 

tu sais utiliser un printf non?
bah sprintf ça marche pareil...  
si tu sais faire printf("%s",ctime(&t)) tu sais faire printf("prefixe%s",ctime(&t)) donc tu sais faire sprintf(machaine,"prefixe%s",ctime(&t));

n°757620
nico168
Posté le 09-06-2004 à 11:08:25  profilanswer
 

char myfilename[MAX_PATH];
sprintf(myfilename,"duree_%s",ctime($t));
duree=fopen(myfilename,"wt" );
 
je pense que tu peux faire qqchose dans ce genre la.
 
edit : grillaid


Message édité par nico168 le 09-06-2004 à 11:09:33
n°757811
bombyce
Posté le 09-06-2004 à 14:03:25  profilanswer
 

Merci pour votre aide.
 
A+

n°757812
bombyce
Posté le 09-06-2004 à 14:03:30  profilanswer
 

Merci pour votre aide.
 
A+

n°760022
bombyce
Posté le 11-06-2004 à 09:31:07  profilanswer
 

Code :
  1. void main(int argc,char *argv[])
  2. {
  3. FILE *temporaire;
  4. FILE *lignes;
  5. FILE *duree;
  6. FILE *casParticulier;
  7. struct date jour;
  8. time_t t;
  9. char nomfich[20],*test2,*test3,*test4,*test1,*mot1,*mot2,*temp,*temp1,*fin,*phras;
  10. char caracteres[TAILLE];
  11. int i,z;
  12. int nblignes;
  13. double retablissement;
  14. char temporaire_fic[500]="TEMPORAIRE";
  15. char duree_fic[500]="DUREE_";
  16. |
  17. |
  18. |
  19. time(&t);   
  20. printf("\n Affichage : %s", ctime(&t)); 
  21. sprintf(duree_fic,"duree_%s",ctime(&t));
  22. printf("\n duree_fic : %s",duree_fic);
  23. if ((duree=fopen(duree_fic,"wt" ))==NULL){
  24.          printf("\n Erreur d'ouverture du fichier de traitement
  25.          des durees" );
  26. }else{
  27.         if ((temporaire=fopen(temporaire_fic,"r+" ))==NULL){


 
 
 
Je pensais ne plus avoir de probleme apres avoir rajoute les infos du jour au nom du fichier, mais maintenant  quand je fais le test j'obtient toujours : "Erreur d'ouverture du fichier de traitement  des durees"
or je veux pouvoir rentrer dans le 'else'.
 
Je ne comprends pas pourquoi ça ne marche pas.
Quelqu un peut il m'eclairer?
Merci.  

mood
Publicité
Posté le 11-06-2004 à 09:31:07  profilanswer
 

n°760043
nico168
Posté le 11-06-2004 à 09:49:49  profilanswer
 

peux tu nous montrer se qu'affiche ton programme ? ou du moins, le contenu de duree_fic.
 

Code :
  1. fopen(duree_fic,"wt" )


 
dans mon man fopen, j'ai pas de mode d'ouverture avec "t", c'est censé faire quoi ?


Message édité par nico168 le 11-06-2004 à 09:53:33
n°760048
bombyce
Posté le 11-06-2004 à 09:52:14  profilanswer
 

cela m'affiche:
duree_fic: duree_Fri Jun 11 09:33:28 2004

n°760052
nico168
Posté le 11-06-2004 à 09:56:40  profilanswer
 

peut etre qu'il n'aime pas les espaces ou les ":" dans le nom, ou alors mon post plus haut que j'ai édité a propos du "t"

n°760064
bombyce
Posté le 11-06-2004 à 10:02:39  profilanswer
 

J'y ai pense et avec l'aide d un autre on a fait ça :
 
struct date *jour;
|
|
getdate(&jour);
itoa(jour.da_day,jjour,10);
itoa(jour.da_mon,mmois,10);
itoa(jour.da_year,aannee,10);
strcpy(duree_fic , jjour);
strcat(duree_fic, "_" );
strcat(duree_fic , mmois);
strcat(duree_fic, "_" );
strcat(duree_fic , aannee);
strcat(duree_fic , ".his" );
 
on obtient alors  11_06_2004.his
et j'ai toujours le meme pb!!!
 
Alors je bloque , je m'enerve et je casse tout !
 

n°760111
nico168
Posté le 11-06-2004 à 10:32:33  profilanswer
 

et tu m'as pas repondu, il sert a quoi le "t" dans le mode d'ouverture de fopen ?

n°760144
bombyce
Posté le 11-06-2004 à 10:54:09  profilanswer
 

le t de fopen ..."wt"   sert a indiquer qu il s agit d un fichier texte.
 
par exemple pour un fichier en binaire , il y aurait b.

n°760162
nico168
Posté le 11-06-2004 à 10:59:56  profilanswer
 

ha ok, c'est un nuance qui n'existe pas sous unix.
tu peux voir le contenu de errno apres l'appel a fopen, ca peu te donner des indications


Message édité par nico168 le 11-06-2004 à 11:02:55
n°760177
bombyce
Posté le 11-06-2004 à 11:08:08  profilanswer
 

rectification , maintenant avec la deuxieme methode ça marche mais cela me fait une erreur sur le test de l'ouverture du fichier 'temporaire'  :ouch:  :pt1cable:  
 
void main(int argc,char *argv[])
{
FILE *temporaire;
FILE *lignes;
FILE *duree;
FILE *casParticulier;
struct date jour;
 
char nomfich[20],*test2,*test3,*test4,*test1,*mot1,*mot2,*temp,*temp1,*fin,*phras;
char caracteres[TAILLE];
int i,z;
int nblignes;
double retablissement;
 
char temporaire_fic[500]="TEMPORAIRE";
char duree_fic[500]="DUREE_";
char jjour[5], mmois[5], aannee[5];
|
|
|
itoa(jour.da_day,jjour,10);
itoa(jour.da_mon,mmois,10);
itoa(jour.da_year,aannee,10);
|
|
|
strcpy(duree_fic , jjour);
strcat(duree_fic, "_" );
strcat(duree_fic , mmois);
strcat(duree_fic, "_" );
strcat(duree_fic , aannee);
strcat(duree_fic , ".his" );
 
if ((duree=fopen(duree_fic,"at" ))==NULL){
 printf("\n Erreur d'ouverture du fichier de traitement des durees" );  
}else{
 if ((temporaire=fopen(temporaire_fic,"r+" ))==NULL){  
                        //effectuer un traitement.
        }else{
                        //effectuer second traitement.

n°760206
nico168
Posté le 11-06-2004 à 11:20:28  profilanswer
 

meme remarque, consulte errno pour avoir plus d'info sur l'erreur

n°760210
bombyce
Posté le 11-06-2004 à 11:25:51  profilanswer
 

errno --> kesako ?
 
(c les erreurs que m'affiche le compilateur?, si c 'est ça ; le compilateur ne m'affiche pas d'erreur ,c'est a l'execution que cela ne fais pas ce que je veux)

n°760227
nico168
Posté le 11-06-2004 à 11:34:25  profilanswer
 

ben tu serais sous unix je te repondrais "man errno"  :)
par contre stfw(1) est multiplateforme :)
 
(1) search the fucking web

n°760284
bombyce
Posté le 11-06-2004 à 12:10:19  profilanswer
 

OK  :D  
 
je connaissais pas mais ça me plait  :bounce:  
A+

n°760387
Taz
bisounours-codeur
Posté le 11-06-2004 à 13:28:17  profilanswer
 

le "t" n'existe pas selon, l'ANSI, le mode par défaut étant le mode texte

n°760393
bombyce
Posté le 11-06-2004 à 13:36:09  profilanswer
 

D'accord.
Mais tu aurais une explication pour moi sur le fait que mon programme n'effectue jamais le second traitement?
 
A+

n°760418
Taz
bisounours-codeur
Posté le 11-06-2004 à 13:57:48  profilanswer
 

ton ouverture de fichier échoue, voilà tout

n°760451
bombyce
Posté le 11-06-2004 à 14:16:48  profilanswer
 

c corrige , merci Taz
A+

n°760477
nico168
Posté le 11-06-2004 à 14:30:13  profilanswer
 

y'a des trucs que je comprends pas des fois...
tu as ecrit ce code la :

Code :
  1. if ((temporaire=fopen(temporaire_fic,"r+" ))==NULL){ 
  2.                        //effectuer un traitement.
  3.        }else{
  4.                        //effectuer second traitement.


 
qu'on pourrait ecrire en pseudo-langage :

Code :
  1. ouvrir le fichier et si l'ouverture ce passe mal
  2.           effectuer traitement
  3. sinon
  4.           effectuer second traitement


 
et tu te demandais pourquoi tu ne vas pas dans le second traitement ?
 
edit s/bien/mal


Message édité par nico168 le 11-06-2004 à 14:32:21
n°760533
bombyce
Posté le 11-06-2004 à 14:55:50  profilanswer
 

je sais j'avais ecrit des conneries, me suis emmele les pinceaux.
 
en fait ce que je fais c 'est si un fichier temporaire existe (ce fichier regroupe des lignes en desaccord avec le reste du fichier en cour de traitement) j'effectue un traitement ou je compare le contenue de 2 fichiers (ici temporaire et duree puis effectue un traitement entre les 2 et ensuite effectue un nouveau traitement sur duree uniquement afin d'etablir une duree de temps entre 2 heures), soit j'effectue uniquement le traitement sur duree qd temporaire n'existe pas.  
 
A+

mood
Publicité
Posté le   profilanswer
 


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

  conversion chaine de caractere / en numerique

 

Sujets relatifs
recher chaine dans fichier texte[ASP] Conversion string en décimal ?
mettre la chaine de caractère comme il fautCaractère alaphanumérique
remplaer un caractere dans une chaine (champs texte)travail de chaine , comment recuperer des valeurs ......
Caractère spécial ♫ non reconnus sous IEDetection d'une expression numerique dans une chaine
Plus de sujets relatifs à : conversion chaine de caractere / en numerique


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