IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec mes fichiers txt


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut Problème avec mes fichiers txt
    Bonjour, j'effectue 500 fois le même prgm (avec des conditions initiales différentes). Pour cela je me suis fait un script qui lance mon prgm C.
    Lorsque mon prgm C a fini d'être exécuté, j'ai une petite dizaine de fichiers texte contenant toutes mes sorties de mon prgm. Mon script déplace ensuite ces fichiers dans le bon répertoire
    1e simulation : Sortie1
    2e simulation : Sortie2 etc...

    Je sais que chaque fichier txt doit faire 3601 ligne. Parfois, j'ai des fichiers qui font moins de ligne. Pourquoi ? Sur 500 simulations, je dois en avoir 3 ou 4 qui font moins de 3601 lignes.

    Est-ce du au fait que le temps d'écire sur le disque dur est plus long que le temps d'éxécuter le prgm, et que donc parfois il peut y avoir un pb ? je vous envoie ma fonction qui écrit sur le disque dur les sorties de mon prgm.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    void fPrintOutput(FILE ** file,realtype t,N_Vector y,unsigned short Z,
    Engine * e,Mechanism * mec,double R,double * coeffvol)
    {
    /* Write on the hard disk the outputs
     
       t : time in s
       
       y : index i(ns+1) to i(ns+1)+ns-1 : mass of each species of the ith zone
           index i(ns+1)+ns : temperature of the ith zone
           where ns is the numbers of species of the mechanism and i=0..Z-1
           
       Z : numbers of zones
       
       e : data about the engine
       
       mec : the mechanism
       
       R : perfect gaz constant
       
       coeffvol : proportionality coefficient of each zone to compute the volume of
                  each zone
       
       
       For each file (1 file for 1 zone) from the first to the (Z-1)th :
       1st column : crank angle in dV
       2nd column : pressure in Pa
       3rd column : temperature in K
       4st column to the last : mass of each species. The order of the species is
                                given in the table mec->species
      
       for the file MeanOutputs.txt (number Z)
       1st column : mean pressure in Pa
       2nd column : mean temperature in K
       
       for the file Volumes.txt (number Z+2)
       1st column : total volume (in m3)
       columns 2 to Z+1 : volume of each zone (in m3);
    */
     
        unsigned short i,s,insp1;
        const double theta=e->rpm6*t-180.0; /* crank angle in dV */
        const unsigned short ns=mec->ns, nsp1=ns+1;
        double V,Vdot,P,aux;
        V_Vp(t,e,&V,&Vdot);
     
        double m=0.; /* total mass of the mixture */
        double * mz=malloc(Z*sizeof(*mz)); assert(mz!=NULL); /* mass of each zone */
     
        /* total mass of each species */
        double * ms=malloc(ns*sizeof(*ms)); assert(ms!=NULL);
        for(s=0;s<ns;++s) ms[s]=0.;
     
        /* compute :
           m : total mass of the mixture
           mz : mass of each zone
           ms : mass of each species
         */
        for(i=0;i<Z;++i)
        {
          mz[i]=0.;
          insp1=i*nsp1;
          for(s=0;s<ns;++s)
          {
            aux=NV_Ith_S(y,insp1+s);
           m+=aux;
           mz[i]+=aux;
           ms[s]+=aux;
          }
        }
     
        double Tmean=MeanTemperature(y,mec,Z,R,m); /* mean temperature (in K) */
     
         /* mean pressure (in Pa) so the factor 0.1 to convert mean pressure from
            dyne/cm2 to Pa
         */
        double Pmean=MeanPressure(Tmean,ms,mec,V,R)*0.1;
     
     
     
        for(i=0;i<Z;++i)
        {    
        insp1=i*nsp1;
        P=Pressure(y,coeffvol[i]*V,i,mec,mz[i],R);
        fprintf(file[i],"%14.6le\t%14.6le\t%14.6le",theta,P,NV_Ith_S(y,(i+1)*ns+i));
        for(s=0;s<ns;++s) fprintf(file[i],"\t%14.6le",NV_Ith_S(y,insp1+s));    
        fprintf(file[i],"\n");
        } /* end of for(i=0;i<Z;++i) */
     
        /* writing of mean pressure and mean temperature */
        fprintf(file[Z],"%14.6le\t%14.6le\n",Pmean,Tmean);
     
        /* writing of the total volume and the volume of each zone */
        V*=1e-6; /* to convert volumes from cm3 to m3 */
        fprintf(file[Z+2],"%14.6le",V);
        for(i=0;i<Z;++i) fprintf(file[Z+2],"\t%14.6le",coeffvol[i]*V);
        fprintf(file[Z+2],"\n");
     
     free(mz); mz=NULL;
     free(ms); ms=NULL;
    }
    Merci.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par salseropom
    Je sais que chaque fichier txt doit faire 3601 ligne. Parfois, j'ai des fichiers qui font moins de ligne. Pourquoi ? Sur 500 simulations, je dois en avoir 3 ou 4 qui font moins de 3601 lignes.
    Etudie ces sorties pour voir pourquoi il y a un problème.

    Est-ce du au fait que le temps d'écire sur le disque dur est plus long que le temps d'éxécuter le prgm
    Non le programme est ralenti par la vitesse du disque et donc attends que l'écriture se termine.

    je vous envoie ma fonction qui écrit sur le disque dur les sorties de mon prgm.
    Le nombre de lignes de ton fichier est donné par la valeur de Z, vérifie cette valeur à chaque exécution...

    Jc

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut fearyourself,
    Etudie ces sorties pour voir pourquoi il y a un problème.
    Mon prgm intègre une équation différentielle sur l'intervalle [0, tfin]. J'ai ouvert les fichiers qui ont un pb et ils ont moins de ligne car l'intégration s'est arrêtée avant la fin. Dans mon main(), j'ai un return (1) si l'intégration a échoué et un return 0 si tout s'est bien passé. Ensuite mon script chope cette valeur et relance le prgm si la valeur est 1 et déplace les fichiers si la valeur est 0.

    Le nombre de lignes de ton fichier est donné par la valeur de Z, vérifie cette valeur à chaque exécution...
    Non, le nombre de fichiers de sorties est donné par la valeur de Z (qui est fixée au début du prgm, et qui est la même pour les 500 simulations). En revanche le nombre de lignes est donné par mon intervalle de discrétisation qui est lui aussi fixé et identique pour les 500 simulations.

    Je suis un peu perplexe.

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par salseropom
    Non, le nombre de fichiers de sorties est donné par la valeur de Z (qui est fixée au début du prgm, et qui est la même pour les 500 simulations). En revanche le nombre de lignes est donné par mon intervalle de discrétisation qui est lui aussi fixé et identique pour les 500 simulations.
    Exact, j'étais trop rapide dans la lecture,

    Donc en gros, certains de tes fichiers d'indices 0 à Z-1 ont moins de lignes que les autres, c'est ça?

    Jc

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    oui c'est ca !
    Voici mon script qui lance mon prgm C et qui déplace les fichiers si l'intégration a bien eu lieu ou qui recommence l'intégration si elle a échouée

    A la fin de mon prgm C, tous les fichiers texte de sorties sonc dans mon répertoie courant.
    ensuite je crée le répertoire ../Outputs s'il n'existe pas
    puis je crée le répertoire ../Outputs/Output1 s'il n'existe pas et je déplace tous les fichiers de sorties dans ce nouveau répertoire. Puis je passe au répertoire ../Outputs/Output2 et ainsi de suite.

    J'ai fait un autre script qui contient la boucle "for" qui lance 500 fois le script ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    #!/bin/sh
     
    ret=1
     
    while [ $ret != 0 ]
    do
     
      # Execution program
      rm -f out
      make
      echo""
      echo "Elapsed time :"
      time -p ./out
      ret=$? # valeur retournee par le programme C
      if [ $ret != 0 ]
      then 
        echo""
        echo "ERROR : exit program and new run"
        echo""
      fi
    done
     
    # Creation new directory
     
    if [ ! -d ../Outputs ] # teste si le repertoire ../Outputs n'existe pas
    then
      mkdir ../Outputs
    fi
     
    if [ ! -d ../Outputs/Inputs ]
    then mkdir ../Outputs/Inputs
    fi
     
    count=1 # counter
    for i in `(ls ../Outputs)`
    do
      if [ -d ../Outputs/Output$count ]
      then
        count=`expr $count + 1`
      fi
    done
     
    mkdir ../Outputs/Output$count
     
    # copy output files in the last directory created : ../Outputs/Output$count
    mv Particle* ../Outputs/Output$count
    mv RandomInitialConditions.txt ../Outputs/Output$count
    mv MeanTP.txt ../Outputs/Output$count
    mv Volumes.txt ../Outputs/Output$count
     
    # copy input files in the last directory created : ../Outputs/Output$count
    cp input.txt ../Outputs/Output$count
    cp system.txt ../Outputs/Output$count
     
    # copy the file input.txt under the name input$count.txt in the directory
    # ../Outputs/Inputs
    cp input.txt ../Outputs/Inputs/input$count.txt
     
    echo "Creation of the directory ../Outputs/Output$count"
    echo""

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par salseropom
    Je sais que chaque fichier txt doit faire 3601 ligne. Parfois, j'ai des fichiers qui font moins de ligne. Pourquoi ? Sur 500 simulations, je dois en avoir 3 ou 4 qui font moins de 3601 lignes.
    Il faut être sûr que tu fermes le fichier proprement...
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. remplir une base access avec un fichier .txt en VB.net
    Par altheorijinal dans le forum Windows Forms
    Réponses: 0
    Dernier message: 16/03/2009, 13h41
  2. problème d'arborescence avec mes fichiers
    Par M4XiMUZ dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 12/04/2007, 18h52
  3. SGBD sur SUN Solaris avec synchro fichier txt
    Par Nicos77 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 01/02/2007, 16h03
  4. Pb avec le fichiers .txt générés
    Par Emilie MARQUOIS-OGEZ dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2006, 14h43
  5. Eclipse (phpEclipse) pb avec mes fichiers
    Par famak dans le forum Eclipse PHP
    Réponses: 3
    Dernier message: 04/10/2006, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo