Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Discussion: Optimisation du code

  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Albanie

    Informations forums :
    Inscription : décembre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Optimisation du code

    Voila en ce moment la je travaille sur un projet qui consiste a :

    Vérifiez la mémoire vive du système, à partir de là déterminer la taille maximale des fichiers qu'il peut gérer. (suggérer 10-20% de la fréquence max de RAM) Si le fichier est plus grand que la taille de fichier maximale, fractionnés automatiquement en fichiers temporaires et les utiliser.

    donc voici la demarche:

    Ouvrir le fichier
    Vérifier la quantité de lignes définissent comme [lignes]
    Crée un tableau [lignes]
    Chargez toutes les urls dans un tableau
    fermer le fichier

    split.c :

    Code :
    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    / *
    split.c accueillera les fonctions pour découper les fichiers d'entrée qui sont trop grands.
    Cela devrait garder l'utilisation de la mémoire faible.
    Taille du fichier(FileSize) max est déterminé par l'entrée d'utilisateur (-m 4096) ou par le programme lui-même s'il n'est pas spécifié
    * /
     
    #include <split.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <Windows.h>
     
    int fileSize ( char File[] ); //int pour stocker la taille du fichier
    void fileNameExt ( char Name[], char Ext[], char File[] );
     
    int splitmain( int argc, char *argv[] ) //méthode principale
    {
    FILE *source, *destination; //définir source et la destination des pointeurs de fichiers 
    int size, parts; //int pour la taille du fichier de sortie et la quantité de fichiers de sortie
    char name[100], ext[100], aux[100];
     
    if( argc < 3 ) //vérifier combien de args ont été entrés
    {
    printf( "Il n'y a pas suffisamment de args!" ); 
    system( "pause" ); 
    return 0;
    }
     
    fileNameExt( name, ext, argv[1] );
    parts = atoi( argv[2] );
     
    size = fileSize( argv[1] ); //taille variable = filesize de arg1, le fichier d'entrée.
    if( (source = fopen(argv[1], "rb")) == NULL ) //si fopen renvoie NULL le fichier n'est pas présent, les fichiers vides commence par \ n?
    {
    printf( "Erreur! Fichier source n'a pas pu être ouvert!" );
    system( "pause" );
    return 0;
    }
     
     
    for( int i = 0; i < parts; i++ ) //jusqu'à int i est le même que les parties int, boucle.
     
    sprintf( aux, "%s%s-%d", name, ext, i );
    printf( "Generating %s file! -- ", aux );
     
    if( (destination = fopen(aux, "wb")) == NULL ) //si le fichier de destination fopen renvoie NULL alors il n'ya pas de sortie
    {
    printf( "Errer! fichier de destination %s n'a pas pu etre cree!", aux ); 
    system( "pause" );
    return 0;
    }
     
    char car = getc( source );
    for( int j = 0; j < size/parts && !feof(source); j++ )
    {
    putc( car, destination );
    car = getc( source );
    }
     
    printf( "OK!
    " );
    fclose( destination );
    }
     
    fclose( source );
    system( "pause" );
    return 0;
    }
     
    int fileSize( char File[] ) //calculer la taille du fichier
    {
    FILE *f; //initier pointeur du fichier
     
    if( (f = fopen(File,"rb")) == NULL ) //si fopen renvoie NULL le fichier n'est pas présent, les fichiers vides commence par \n?
    {
    printf( "Erreur! Fichier source n'a pas pu être ouvert!" ); 
    system( "pause" );
    return 0;
    }
     
    fseek( f, 0,SEEK_END ); 
    int sz = ftell(f);
    fclose( f );
     
    return sz;
    }
     
    void fileNameExt( char Name[], char Ext[], char File[] )
    {
    char *aux;
    if( (aux = strrchr(File, '')) == NULL )
    {
    if( (aux = strrchr( File, '/' )) == NULL)
    {
    aux = File;
    }
    }
     
    if( aux != File )
    {
    aux++;
    }
     
    for( int i = 0; *aux != '.'; i++, aux++ )
    {
    Name[i] = *aux;
    Name[i+1] = '\0;';
    }
     
    for( int i = 0; *aux != '\0;'; i++, aux++ )
    {
    Ext[i] = *aux;
    Ext[i+1] = '\0';
    }
    }
    split.h :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef SPLIT_H_INCLUDED
    #define SPLIT_H_INCLUDED
     
    /* Prototypes des fonctions */
    /* split main() */
    int splitmain( int argc, char *argv[] );
     
    /* calculer la taille de fichier */
    int fileSize( char File[] );
     
    /* */
    void fileNameExt( char Name[], char Ext[], char File[] );
     
    #endif
    defhaze.c :

    Code :
    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
    #include <conio.h>
    #include <dos.h>  
    #include <process.h>   
    #include <stdio.h> 
    #include <split.h> 
     
        int main(int argc, char *argv[])
        {  
            printf(" /*****Bienvenu a De(f)haze*****\ \n");
            printf(" |			        | \n");
            printf(" |       Fait par Luloo         | \n");
            printf(" |                              | \n");
            printf(" |                              | \n");
            printf(" \*****--------------------*****/ \n");
            int suc6 = 0;
            loadfile();
     
            return 0; 
         } 
     
          int loadfile() //Méthode pour charger le fichier d'entrée dans un tableau
          {
            inputfile = ; //attribuer une valeur à fichier d'entrée
    	FILE *fpinput; //définir pointeur du fichier d'entrée
            fpinput=fopen(&inputfile”, ”r”); //ouvrir le fichier d'entrée avec mode "r", lecture seule(read only)
            //fp = fopen("filename.txt", "r");
    	printf("Le comptage et la collecte des urls ... \n"); 
     
    	while((fgets(fp)) != NULL) //tandis que la rangée / ligne ne renvoie pas NULL (espace ou \n !=NULL), urls++
             {
               urls++;
             }  
            return 0;
      }
     
            for(int i=0; i<urls; i++) //tandis que i est inférieur au montant des urls, tourne en boucle
            fscanf(fp, "%d %s\n", &UrlArr[i]); //ajouter une ligne au tableau
    	fclose(fpinput); //fermez le fichier puisque les urls sont déjà dans le tableau
          }
     
    /*
    Méthode Append ajoutera les injections réussies dans le fichier de sortie si dans le cas d'un crash ou quoi que vous aurez toujours vos injections réussies
    */
     
    int apppend()
    {
     
    FILE *fpoutput; //définir pointeur du fichier de sortie
    fpoutput = fopen("output.txt", "a"); //Inclure dans le fichier de sortie
     
    if (suc6 <1)
    {
    struct date d;
    getdate(&d); 
    fwrite("fpoutput", "De(f)haze started [%d/%d/%d",d.da_day,d.da_mon,d.da_year]\n");
    fwrite("fpoutput", "Codee par Luloo \n");
    }
     
    }
    voila mon probleme cest que je trouve que mon code est un peu mal structure et incomplet

    donc en gros, jaimerai avoir quelques idees concernant l'optimisation de mon code et si possible corriger quelques fautes

  2. #2
    Expert Confirmé Sénior


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 059
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 059
    Points : 15 125
    Points
    15 125

    Par défaut

    Bonjour,

    Je pense que la première chose à faire serait d'indenter ton code

  3. #3
    Responsable 2D/3D/Jeux

    Avatar de LittleWhite
    Homme Profil pro Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    16 939
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 16 939
    Points : 87 754
    Points
    87 754

    Par défaut

    Bonjour

    Et puis à la fin, ce truc me fait douter :
    Code :
    1
    2
    3
    fwrite("fpoutput", "De(f)haze started [%d/%d/%d",d.da_day,d.da_mon,d.da_year]\n");
    fwrite("fpoutput", "Codee par Luloo \n");
    }
    Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre chevronné
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : avril 2009
    Messages : 120
    Points : 641
    Points
    641

    Par défaut

    Citation Envoyé par LittleWhite Voir le message
    Bonjour

    Et puis à la fin, ce truc me fait douter :
    Code :
    1
    2
    3
    fwrite("fpoutput", "De(f)haze started [%d/%d/%d",d.da_day,d.da_mon,d.da_year]\n");
    fwrite("fpoutput", "Codee par Luloo \n");
    }
    Oui, là ce n'est même plus un doute, c'est une certitude : cela ne peut marcher que si l'on vire les guillemets autour de fpoutput et que l'on remplace le fwrite par un fprintf (et puis une petite modification de la ... chaîne !

    Code :
    1
    2
    fprintf(fpoutput, "De(f)haze started [%d/%d/%d]\n",d.da_day,d.da_mon,d.da_year);
    fprintf(fpoutput, "Codee par Luloo \n");

    Et puis - Oula ! - il faut penser à doubler les anti-slashes :

    Code :
    1
    2
    3
    4
    5
    6
            printf(" /*****Bienvenu a De(f)haze*****\\ \n");
            printf(" |			        | \n");
            printf(" |       Fait par Luloo         | \n");
            printf(" |                              | \n");
            printf(" |                              | \n");
            printf(" \\*****--------------------*****/ \n");

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •