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

  FORUM HardWare.fr
  Programmation
  C

  Premier programme C (manip. de fichiers txt)

 


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

Premier programme C (manip. de fichiers txt)

n°1747379
a_goodspee​d
Posté le 17-06-2008 à 10:09:44  profilanswer
 

Voilà mon probleme:
J'essaie de faire un petit programe pour faire des modif automatiques dans un fichier de calculs.  
 
Voilà à quoi ressemble mon code (pour linstant):
 
 
Mon main.c

Code :
  1. #include <cstdlib>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #define TAILLE_MAX 100
  6. #include <math.h>
  7. #include "compteur.h"
  8. using namespace std;
  9. int main(int argc, char *argv[])
  10. {
  11. int nbShell = 0;
  12.     nbShell = COMPTEURSHELL(); // Recupere la valeur ds compteurSHELL.c
  13.     printf ("\n %ld 'SHELL GENERAL SECTION' presents \n", nbShell);
  14. int nbOrient = 0;
  15.     nbOrient = COMPTEURORIENT(); // Recupere la valeur ds compteurORIENT.c
  16.     printf ("\n %ld 'ORIENTATION' inutiles presents pour les elements 'SOLID'\n", nbOrient);
  17.     system("PAUSE" );
  18.     return 0;
  19. }


 
Mon compteurSHELL.c (quasiment identique au compteurORIENT.c)
 

Code :
  1. #include <cstdlib>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #define TAILLE_MAX 100
  6. #include <math.h>
  7. ////////////////////////////////////////////////////////////////////////////////////////
  8. /* CETTE FONCTION COMPTE LE NOMBRE DE "SHELL GENERAL SECTION" PRESENTS DANS LE FICHIER*/
  9. ////////////////////////////////////////////////////////////////////////////////////////
  10. using namespace std;
  11.     int COMPTEURSHELL()
  12.     {
  13.     FILE* fichier = NULL;
  14.     char chaine[TAILLE_MAX] = "";
  15.     int  CompteurSHELL=0;
  16.     char *compare="";
  17.    
  18.     fichier = fopen("X73sortie_HM.inp", "r+" );
  19.     if (fichier != NULL)
  20.    {
  21.         while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  22.         {
  23.         compare = strstr(chaine, "SHELL GENERAL SECTION" );
  24.        
  25.         if (compare != NULL)
  26.         {
  27.         CompteurSHELL++;
  28.         }
  29.         }
  30.         fclose(fichier);
  31.      return CompteurSHELL;   } 
  32. }


 
Et mon compteur.h (composites des compteurSHELL et compteurORIENT)
 

Code :
  1. #include <cstdlib>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #define TAILLE_MAX 100
  6. #include <math.h>
  7. int COMPTEURSHELL();
  8. int COMPTEURORIENT();


 
 
Jusque là, tout va bien, mais je n'arrive pas à creer une fonction pour demander d'entrer ,dans la console, le nom du fichier à modifier.
Pour l'instant, le fichier est ouvert puis fermé à chaque étape "compteurSHELL" et "compteurORIENT". Je voudrais donc qu'il soit ouvert au début du "main" puis fermé à la fin...
Quelqu'un pourraît m'aider??
 
Merci d'avance.


Message édité par a_goodspeed le 26-06-2008 à 11:12:20
mood
Publicité
Posté le 17-06-2008 à 10:09:44  profilanswer
 

n°1747381
skeye
Posté le 17-06-2008 à 10:11:37  profilanswer
 

je ne ferai pas de commentaires sur le code pour l'instant, mais quelle est ta question?


---------------
Can't buy what I want because it's free -
n°1747390
a_goodspee​d
Posté le 17-06-2008 à 10:18:01  profilanswer
 

skeye a écrit :

je ne ferai pas de commentaires sur le code pour l'instant, mais quelle est ta question?


 
Dsl j'avais pas fini d'éditer mon message!! ;)

n°1747392
skeye
Posté le 17-06-2008 à 10:20:39  profilanswer
 

Première question naïve : c'est censé être du C ou du C++?


---------------
Can't buy what I want because it's free -
n°1747394
a_goodspee​d
Posté le 17-06-2008 à 10:22:01  profilanswer
 

skeye a écrit :

Première question naïve : c'est censé être du C ou du C++?


 
Euuuuh..... ben du C

n°1747397
esox_ch
Posté le 17-06-2008 à 10:29:22  profilanswer
 

int nbShell = 0;
    nbShell = COMPTEURSHELL();
 
C'est quoi l'utilité d'initialiser ton int à 0 si c'est pour changer sa valeur à la ligne d'après?

n°1747398
skeye
Posté le 17-06-2008 à 10:29:32  profilanswer
 

#include <iostream> et using namespace std; c'est du C++, pas du C. Et de toute manière tu ne t'en sers pas.
Plus généralement tes #include c'est un peu beaucoup le bordel, là...

 

Ensuite pour répondre un peu plus précisément à ta question, il y a plusieurs choses :
1) Faire saisir le nom du fichier dans le main.
2) Ouvrir le fichier dans le main.
3) Passer en paramètre le FILE* à tes fonctions.

 

Pas de réelle difficulté là a priori...


Message édité par skeye le 17-06-2008 à 10:29:57

---------------
Can't buy what I want because it's free -
n°1747403
Elmoricq
Modérateur
Posté le 17-06-2008 à 10:36:16  profilanswer
 

Effectivement : soit tu enlèves iostream, using namespace et tout le toutim, soit je déplace ce sujet dans la catégorie C++ [:dawao]

n°1747408
a_goodspee​d
Posté le 17-06-2008 à 10:45:39  profilanswer
 

oui en fait je suis sur Dev C++ et ca m'a mis en C++ par défaut, j'ai supprimé les truc en trop... et la je suis bien en C
 
Sinon, j'ai bien essayé, mais je bloqe un peu...
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     char NomDuFichier[100];
  4.     printf("Entrer le nom du fichier a modifier: " );
  5.     scanf("%s", NomDuFichier);


 
Ca, c'est assez simple, mais c'est apres, pour passer en paramètre FILE* que j'ai un peu de mal!!

n°1747411
Elmoricq
Modérateur
Posté le 17-06-2008 à 10:48:05  profilanswer
 

fopen

mood
Publicité
Posté le 17-06-2008 à 10:48:05  profilanswer
 

n°1747417
a_goodspee​d
Posté le 17-06-2008 à 10:55:35  profilanswer
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     char NomDuFichier[100];
  4.     FILE* fichier = NULL;
  5.     printf("Entrer le nom du fichier a modifier: " );
  6.     scanf("%s", NomDuFichier);
  7.    
  8.     fichier = fopen(NomDuFichier, "r+" );


 
Je pense qu'il manque quelquechose dans le compteurORIENT.c et compteurSHELL.c:
 

Code :
  1. if (fichier != NULL)
  2.    {
  3.         while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  4.         {//suite se la commande..


 
Message d'erreur:
 
`fichier' undeclared (first use in this function)  
 

n°1747421
esox_ch
Posté le 17-06-2008 à 11:10:35  profilanswer
 

À voir t'as pas défini "fichier" alors que tu tentes de l'utiliser

n°1747424
a_goodspee​d
Posté le 17-06-2008 à 11:13:17  profilanswer
 

Ben... il est défini dans le main, et c'est justement ca mon problème!!! Je suis bloqué à ce niveau précis...

n°1747426
esox_ch
Posté le 17-06-2008 à 11:15:53  profilanswer
 

Oui s'accord.. Mais tu l'appelles ou? Parce que si t'es pas dans le même scope, y a pas de miracles .. il va pas le trouver .. hein?

n°1747434
a_goodspee​d
Posté le 17-06-2008 à 11:25:57  profilanswer
 

je récapitule là où j'en suis exactement
 
Main:

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define TAILLE_MAX 100
  4. #include "compteurs.h" */ la c'est pour récupérer les composites de mes compteurs
  5.                                   "compeurSHELL" et "comteurORIENT"
  6. int main(int argc, char *argv[])
  7. {
  8.     char NomDuFichier[100];
  9.     FILE* fichier = NULL;
  10.     printf("Entrer le nom du fichier a modifier: " );
  11.     scanf("%s", NomDuFichier);
  12.    
  13.     fichier = fopen(NomDuFichier, "r+" ); // Là je lui demande d'ouvrir un fichier dont on a donné le nom
  14. //--------------------------------------------------------------------------
  15. int nbShell = 0;
  16.     nbShell = COMPTEURSHELL(); // Recupere la valeur ds compteurSHELL.c
  17.     printf ("\n %ld 'SHELL GENERAL SECTION' presents \n", nbShell);
  18. //--------------------------------------------------------------------------
  19. int nbOrient = 0;
  20.     nbOrient = COMPTEURORIENT(); // Recupere la valeur ds compteurORIENT.c
  21.     printf ("\n %ld 'ORIENTATION' inutiles presents pour les elements 'SOLID'\n", nbOrient);
  22. //--------------------------------------------------------------------------
  23.     system("PAUSE" );
  24.     fclose(fichier);
  25.     return 0;
  26. }


 
Mon "compteurSHELL.c" (qausi identique à "compteurORIENT.c" )

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define TAILLE_MAX 100
  4. #include <math.h>
  5.     int COMPTEURORIENT()
  6.     {
  7.     char chaine[TAILLE_MAX] = "";
  8.     int  CompteurORIENT=0;
  9.     char *compare="";
  10.     if (fichier != NULL)
  11.    {
  12.         while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  13.         {
  14.         compare = strstr(chaine, " ORIENTATION = ," );
  15.        
  16.         if (compare != NULL)
  17.         {
  18.         CompteurORIENT++;
  19.         }
  20.         }
  21.      return CompteurORIENT;   } 
  22. }


 
Et mon header compteurs.h

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define TAILLE_MAX 100
  4. #include <math.h>
  5. int COMPTEURSHELL();
  6. int COMPTEURORIENT();


 
Je ne sais pas où mettre quoi pour que ca marche!


Message édité par a_goodspeed le 17-06-2008 à 11:26:44
n°1747441
Elmoricq
Modérateur
Posté le 17-06-2008 à 11:45:58  profilanswer
 

Ta variable "fichier" n'existe que dans la fonction main(), pas au-delà.
 
Le plus simple dans ton cas est d'ajouter un paramètre FILE* à ta fonction COMPTEURORIENT(), que tu utiliseras dedans.

n°1747478
a_goodspee​d
Posté le 17-06-2008 à 12:32:10  profilanswer
 

Merci.. mais j'ai beau essayer, j'y arrive tj pas... quelque pourrait me montrer sur mon prog ce qu'il manque pour que ca aille bien? C'est peut etre tres simple, mas je suis perdu!!

n°1747488
esox_ch
Posté le 17-06-2008 à 12:56:47  profilanswer
 

Bon ...
 

Code :
  1. void maFonction(){
  2. int a = 0;
  3. // Ici int a est défini
  4. }
  5. void monAutreFonction(){
  6. //Ici int a n'est plus défini car on a changé de fonction (= et donc de scope)
  7. }
  8. void reFonction(int a)
  9. {
  10. // Ici int a est à nouveau défini car je le lui passe comme paramètre.
  11. }


 
Compris?


Message édité par esox_ch le 17-06-2008 à 12:57:57

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1747493
a_goodspee​d
Posté le 17-06-2008 à 13:06:06  profilanswer
 

Oui, ca j'ai bein compris...
Ce que je n'ai pas compris, c'est comment (dans mon cas) dire à mes fonctions "int COMPTEURSHELL()" et "int COMPTEURORIENT()" de travailler sur le fichier ouvert dans le main, et dont le nom de la variable est "NomDuFichier".


Message édité par a_goodspeed le 17-06-2008 à 13:07:11
n°1747508
esox_ch
Posté le 17-06-2008 à 13:24:26  profilanswer
 

Tu le fais exprès? C'est peut-être pas ce que fait la fonction reFonction dans mon exemple? Travailler sur un entier défini dans une autre fonction?

n°1747694
a_goodspee​d
Posté le 17-06-2008 à 16:38:02  profilanswer
 

En fait, j'ai beau essayer, il doit y avoir une histoire de pointeurs par rapport à mon nom de fichier (le parametre "fichier" )...
 
Donc, pour mieux comprendre, je suis reparti sur des bases plus saines...
 
Du coup, je demande le nom du fichier que je garde comme parametre d'entrée pour les fonctions "compteur".
La seule différence avec ce que je voulais faire c'est que le fichier s'ouvre et se ferme toujours pour chaque fonction..
Mais ca marche!!  :)  
 
 
Mon main:

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define TAILLE_MAX 100
  4. #include <math.h>
  5. typedef char mot[100];
  6. //--------------------------------------------------------------------------------------------------//
  7. //                                       DEBUT DU MAIN                                              //                 
  8. //--------------------------------------------------------------------------------------------------//  
  9.    
  10. int main(int argc, char *argv[])
  11. {
  12. //----------------------------On récupère le nom du fichier à miodifier-------------------------------
  13.    
  14.     mot NomFichier;
  15.     printf("Entrer le nom complet du fichier a modifier:" );
  16.     scanf("%s",&NomFichier);
  17.     printf("Vous allez modifier le fichier :%s ", NomFichier);
  18. //---------------------On lance la fonction COMPTEURSHELL et on récupère la valeur---------------------
  19. int nbShell = 0;
  20.     nbShell = COMPTEURSHELL(NomFichier);
  21.     printf ("\n %ld 'SHELL GENERAL SECTION' presents \n", nbShell);
  22. //    system("PAUSE" );
  23. //    return 0;}
  24. //---------------------On lance la fonction COMPTEURORIENT et on récupère la valeur----------------------
  25. int nbOrient = 0;
  26.     nbOrient = COMPTEURORIENT(NomFichier);
  27.     printf ("\n %ld 'ORIENTATION' inutiles presents pour les elements 'SOLID'\n", nbOrient);
  28. //----------------------------------------------------------------------------------------------------
  29.     system("PAUSE" );
  30.     return 0;}


 
Mon (mes) compteur:

Code :
  1. #include <string.h>
  2. #include <stdio.h>
  3. #define TAILLE_MAX 100
  4. #include <math.h>
  5. ////////////////////////////////////////////////////////////////////////////////////////
  6. /* CETTE FONCTION COMPTE LE NOMBRE DE "SHELL GENERAL SECTION" PRESENTS DANS LE FICHIER*/
  7. ////////////////////////////////////////////////////////////////////////////////////////
  8.     typedef char mot[100];
  9.     int COMPTEURSHELL(mot NomFichier)
  10.     {
  11.     FILE *fichier = NULL;
  12.     char chaine[TAILLE_MAX] = "";
  13.     int  CompteurSHELL=0;
  14.     char *compare="";
  15.    
  16.     fichier = fopen(NomFichier, "r+" );
  17.     if (fichier != NULL)
  18.    {
  19.         while (fgets(chaine, TAILLE_MAX, fichier) != NULL)
  20.         {
  21.         compare = strstr(chaine, "SHELL GENERAL SECTION" );
  22.        
  23.         if (compare != NULL)
  24.         {
  25.         CompteurSHELL++;
  26.         }
  27.         }
  28.         fclose(fichier);
  29.      return CompteurSHELL;   }  }


Message édité par a_goodspeed le 17-06-2008 à 16:40:09
n°1747696
Elmoricq
Modérateur
Posté le 17-06-2008 à 16:41:15  profilanswer
 

Un peu de documentation pour t'aider :
 
- Quelques fondamentaux : http://mapage.noos.fr/emdel/init_c.htm
 
- Pourquoi ma fonction ne modifie pas ma variable ?
 
- Gestion de fichiers en C
 
Cela devrait t'aider.

n°1747709
a_goodspee​d
Posté le 17-06-2008 à 17:04:48  profilanswer
 

Merci bien... j'ai encore un peu de lecture devant moi!!!!
j'espere pouvoir continuer sans trop d'embuches... le plus dur reste à venir!

n°1748015
a_goodspee​d
Posté le 18-06-2008 à 10:05:14  profilanswer
 

Alors voilà la suite de mon problème:
Comme précisé dans mon premier post, le but de mon programme serait de faire des modifs dans un fichier (fichier input pour simulation numérique).  
Les modifications seraient du genre: à cahque fois que le prog. trouve "SHELL GENERAL SECTION" dans le doc, il le remplace par "SHELL SECTION"
 
autrement di:
 


.....
Blablabla.....
*SHELL GENERAL SECTION, ELSET = PSHELL_36, MATERIAL = MAT1_10
0.77           ,
**HWCOLOR COMP         36     3
*SHELL GENERAL SECTION, ELSET = PSHELL_37, MATERIAL = MAT1_11
2.5            ,
**HWCOLOR COMP         37     4
*SHELL GENERAL SECTION, ELSET = PSHELL_38, MATERIAL = MAT1_12
1.27           ,
Blablabla...
.....


 
deviendrait:
 

.....
Blablabla.....
*SHELL SECTION, ELSET = PSHELL_36, MATERIAL = MAT1_10
0.77           ,
**HWCOLOR COMP         36     3
*SHELL SECTION, ELSET = PSHELL_37, MATERIAL = MAT1_11
2.5            ,
**HWCOLOR COMP         37     4
*SHELL SECTION, ELSET = PSHELL_38, MATERIAL = MAT1_12
1.27           ,
Blablabla...


Alors ma requete n'est évidemment pas de vous demander de me pondre le programme mais de me conseiller sur la démarche et les commandes à utiliser.
 
Merci d'avance

Message cité 1 fois
Message édité par a_goodspeed le 18-06-2008 à 10:06:10
n°1748036
a_goodspee​d
Posté le 18-06-2008 à 10:39:42  profilanswer
 

Je sais, ca peu se faire assez facilement avec WORDPAD, mais le truc c'est quil y a plusieur modifs à faire (dont des un peu plus compliquées plus tard), et que la syntaxe est primordiale... donc, c'est pour faire tout ca sans erreur et surtout ca servirait aussi à d'autres utilisateurs que moi qui ne connaissent pas exactement toutes les modif à faire.

n°1748038
Elmoricq
Modérateur
Posté le 18-06-2008 à 10:50:51  profilanswer
 

a_goodspeed a écrit :


Alors ma requete n'est évidemment pas de vous demander de me pondre le programme mais de me conseiller sur la démarche et les commandes à utiliser.

 

Le C pour ce genre de tache, c'est un peu sortir la grosse bertha pour enlever un nid de frelons. :D
En PERL par exemple, ça se fait en une seule ligne, par exemple :

perl -pi -e 's/SHELL GENERAL SECTION/SHELL SECTION/g' <le nom de ton fichier (ou bien fichiers*)>

 

En C, il te faut, dans l'ordre :
- ouvrir le fichier source en lecture (fopen)
- ouvrir un fichier destination temporaire en écriture (fopen)
- lire chaque ligne du fichier source (fgets)
- réécrire chaque chaîne lue dans un buffer (snprintf) en recherchant "SHELL GENERAL SECTION" (strstr) et en le remplaçant par "SHELL SECTION"
- écrire le buffer dans le fichier destination (fprintf) (tu peux faire cette étape-ci et celle juste avant en une seule passe si tu veux te passer d'un buffer)
- fermer les deux fichiers (fclose)
- déplacer le fichier destination à la place de l'ancien fichier source (rename)

 
a_goodspeed a écrit :

Je sais, ca peu se faire assez facilement avec WORDPAD, mais le truc c'est quil y a plusieur modifs à faire (dont des un peu plus compliquées plus tard), et que la syntaxe est primordiale... donc, c'est pour faire tout ca sans erreur et surtout ca servirait aussi à d'autres utilisateurs que moi qui ne connaissent pas exactement toutes les modif à faire.

 

Et puis surtout, wordpad c'est mignon, mais quand tu as x fichiers à passer et qu'éventuellement tu doives batcher le procédé, c'est pas très pratique.


Message édité par Elmoricq le 18-06-2008 à 10:52:19
n°1748051
a_goodspee​d
Posté le 18-06-2008 à 11:10:06  profilanswer
 

:sweat: Oulalaaaaaaa...  
 
ben je suis pas sorti de l'auberge, comme on dit!!!!
Mais si j'ai bien compris, pour l'instant j'ai déja plus ou moins fait les étapes 1 et 3 !??
 
Pour le langage Perl, je connais pas du tou! j'avais meme jamais entendu parler...
mais apres ces modifs, il yen aura d'autres du style:
 
- Rechercher tous les MATERIAL="vide"
- Donner le nom du matériau (parmis ceux présents dans le fichier)-> Choix ds une liste
- ajouter le matériau -> MATERIAL = MAT1_50
   
Conclusion: Je m'en sortirai jamais... :cry:


Message édité par a_goodspeed le 18-06-2008 à 11:12:13
n°1748058
Elmoricq
Modérateur
Posté le 18-06-2008 à 11:16:57  profilanswer
 

Tes trois autres taches ne sont pas très différentes de celle que tu as décrite en premier lieu. Je te conseille donc de d'abord de concentrer sur celle-ci, et d'implémenter plus tard les trois autres, cela devrait se faire sans changer l'architecture du programme.

 

Pour PERL, c'est simplement un langage spécialisé dans le parsing et le traitement de fichiers, chaînes de caractères et autre joyeuseté du genre (bon, bien sûr il y a bien plus que ça dans ce langage, mais disons que sa fonction première).

Message cité 1 fois
Message édité par Elmoricq le 18-06-2008 à 11:17:04
n°1748070
a_goodspee​d
Posté le 18-06-2008 à 11:41:23  profilanswer
 

Ok merci beaucoup.
 
Mais une petite question encore...
Pour mon fichier temporaire, je viens de faire un petit test:
 

Code :
  1. int main(int argc, char *argv[])
  2. {
  3.     FILE *fichierTmp = NULL;
  4.     fichierTmp=fopen("fichier temporaire.inp", "w+" );
  5. //Suite du programme
  6.     fclose(fichierTmp);
  7.     rename("fichier temporaire.inp","X73.inp" );
  8.     return 0;}


 
Ca me créé bien un fichier "fichier temporaire.inp"
Mais il ne le renomme pas en X73.inp parcequ'il existe déjà.
Par contre si je renomme en X73bis.inp (par exemple), ca marche...
Mais bon, ca au pire c'est pas trop grave!


Message édité par a_goodspeed le 18-06-2008 à 11:41:39
n°1748077
Elmoricq
Modérateur
Posté le 18-06-2008 à 11:55:33  profilanswer
 

Ah tiens, je pensais qu'il écraisait l'ancien fichier.
Dans ce cas tu peux utiliser unlink() pour effacer le fichier avant de renommer le nouveau.

n°1748109
gilou
Modérateur
Modzilla
Posté le 18-06-2008 à 13:28:22  profilanswer
 

Elmoricq a écrit :

Tes trois autres taches ne sont pas très différentes de celle que tu as décrite en premier lieu. Je te conseille donc de d'abord de concentrer sur celle-ci, et d'implémenter plus tard les trois autres, cela devrait se faire sans changer l'architecture du programme.

Citation :

Donner le nom du matériau (parmis ceux présents dans le fichier)-> Choix ds une liste


La, ca va demander un peu plus d'efforts.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1748112
Elmoricq
Modérateur
Posté le 18-06-2008 à 13:31:24  profilanswer
 

Ça dépend si la liste est codée en dur ou non, disons que c'est un poil plus complexe mais la mécanique générale reste la même. [:dawa]

n°1748148
a_goodspee​d
Posté le 18-06-2008 à 14:11:09  profilanswer
 

Codé en dur??? c'est à dire?
 
En fait mon fichier (du coté des matériaux) ressemble à ca:

*MATERIAL, NAME=MAT1_1
*DENSITY
7.800E-09,0.0        
*ELASTIC, TYPE = ISOTROPIC
210000.0  ,0.3       ,0.0        
*MATERIAL, NAME=MAT1_2
*DENSITY
2.700E-09,0.0        
*ELASTIC, TYPE = ISOTROPIC
70000.0  ,0.4        ,0.0    
......
....

   
 
Et je voudrais juste que ca affiche un menu du genre:
 
1: MAT1_1    E = 210000   nu = 0.3   dens = 7.8E-9
2: MAT1_2    E = 70000     nu = 0.4   dens = 2.4E-9
3: ......
 
Ensuite, l'utilisateur choisira juste 1 ou 2 (ou +)
Pour l'affecter là où il faut.
 
Ca, pour le menu ca va... je sais comment faire (je pense)
Mais savoir si c'est codé en dur ou pas...
 

n°1748221
esox_ch
Posté le 18-06-2008 à 15:12:26  profilanswer
 

Bein essaie. Quand t'as un problème tu reviens ..
Par contre, ça fait une page que je te lis, et j'ai pas encore compris : Pourquoi tu le fait en C? Je dis pas que c'est le langage dans lequel tu vas te faire le plus chier.. mais ça en est pas loin..

n°1748285
a_goodspee​d
Posté le 18-06-2008 à 15:59:36  profilanswer
 

En fait je travaille avec un logiciel de calculs par éléments finis :ABAQUS"
Le probleme est assez simple:
 
Je récupere un modèle éléments finis (un genre de fichier texte) qui comprend:  
- Les coordonnées des noeuds
- La définition des éléments
- La définition des propriétés
- La définition des matériaux
- Des liaisons....
 
Seumlement, ce fichier est prévu pour un autre code de calculs : NASTRAN (donc tout ca n'est pas codé pareil)
 
Alors pour convertir le fichier "NASTRAN" en fichier "ABAQUS", je passe par un logiciel de préparation/montage de modèle qui peut (plus ou moins bien) fiare la conversion. De là, je récupère un fichier codé en "ABAQUS".
 
C'est là que mon programme intervient: Le logiciel n'a pas TOUT BIEN fait!!! Retse pas mal de modifs à faire, comme supprimer ou ajouter du texte à certains endroits précis... une opération qui peut se répéter plusieurs centaines de fois dans certains cas!!!
Donc sur des fichiers qui font des de 20 à un peu + de 100 Mo, c'est tres long et surtout, la moindre erreur de syntaxe ne pardonne pas!
 
C'est pour à ca que mon prog servira! faire en quelques secondes un manip qui peut prendre du temps et qui peut etre source d'erreurs. :pt1cable:
 
J'espere que mon explication est claire pasque c'est pas forcément évident à suivre...


Message édité par a_goodspeed le 18-06-2008 à 16:00:33
n°1748291
Joel F
Real men use unique_ptr
Posté le 18-06-2008 à 16:02:03  profilanswer
 

si c de la manip de texte, perl et basta quoi :/

n°1748325
Elmoricq
Modérateur
Posté le 18-06-2008 à 16:15:09  profilanswer
 

+1, comme mentionné dans mon post plus haut, PERL est bien plus adapté à ce genre de tache.

n°1748367
a_goodspee​d
Posté le 18-06-2008 à 16:40:34  profilanswer
 

Je vien de regarder, ca à l'air plus simple, mais je pense que ca me servira beaucoup plus de connaitre un peu le C, surtout en tant dans mon domaine...


Message édité par a_goodspeed le 18-06-2008 à 16:42:12
n°1748371
Joel F
Real men use unique_ptr
Posté le 18-06-2008 à 16:43:45  profilanswer
 

bah non, tu dois apprendre à utiliser l'outil adapté à ton problème et pas l'inverse.  
 
Sans compter qu'on apprends pas le C en 3 mois :o

n°1748372
Elmoricq
Modérateur
Posté le 18-06-2008 à 16:44:02  profilanswer
 

En ce cas, je ne saurais trop te conseiller de te procurer un bon livre, ça sert toujours et ça simplifie grandement la tache.
Je suggère "Le Langage C" de Kernighan & Ritchie.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Premier programme C (manip. de fichiers txt)

 

Sujets relatifs
Exécution d'une macro sans ouvrir les fichiers ExcelProgramme VBA qui insere un nom de colonne
[RESOLU] extraire et afficher premier caractere de chaque chaine[AIDE] bug mon projet C
un Switch réparti sur plusieurs fichiers ?Les fichiers : lecture, écriture (help)
Comment imprimer les fichiers html d'un forum?un mini projet en C (j ai besoin d aide)
[résolu]Classes pour faciliter l'utilisation de sockets C, en C++[OPENGL SFML C++] Probléme executable.
Plus de sujets relatifs à : Premier programme C (manip. de fichiers txt)


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