Recuperer des chemin de fichier et analyser ces fichiers [Résolu]

poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 14:31 - Dernière réponse : yg_be 4126 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention
- 25 juin 2017 à 22:06
Bonjour,

J'essaye de faire un programme d"Analyse de fichier log: Mon objectif est de maitriser la manipulation de fichier, de chaine de caractere Etc...

Exemple de ligne de mes fichier LOG:
2016-02-15	17:57:01	info	SRV-NAS	user	Connection	Event: read, Path: /Logiciels/Logiciels/WINDOWS/Editeur hexadecimal/HxD Hex Editor 1.7.7.0 [Portable] Editeur Hexadécimal FR/HxD.exe, File/Folder: File, Size: 3.31 MB, User: XXXX, IP: 192.168.50.11


Pour info, mon code m'a donner pour reslutat: 420 356 241 221 de lignes
Pour 40go
Bref,

Voici le code que j'ai fait, qui m'a permis de déduire que maintenant, je dois trouver une methode pour:
- faire une copy de mon dossier log quelque part
- stocker le path dans un tableau dans une structure, avec un identifiant personnaliser (nom du fichier, ou numerotation peut importe)., du chemin de la copy et du chemin original
- scanner les fichiers .txt de mon nouveau dossier donc, crée une fonction pour analyser fichier par fichier, fonction qui devra supprimer les lignes que je ne veux pas garder, donc qui ont pour IP: 192.168.XXX.XXX, je conserve uniquement les IP publique


Actuellement, j'ai besoin d'aide pour:
- Analyser et stocker le chemin d'acces de mes fichier .txt dans un tableau
- Avec la fonction getc() et strcpy ?? regrouper les caracteres compris entre deux ","
2016-02-15	17:57:01	info	SRV-NAS	user	Connection	Event: read


Je ne connaissais pas la fonction getc()
        
while ((c = getc(FichierLog->fichier_log2)) != EOF)
{
if (c == '\n')
++FichierLog->nb_ligne2;
printf("c: %s",c);
systeme("PAUSE");
}
Donc j'ai glisser un print() et pause pour voir ce qui se passer, et donc, a chaque tour de boucle je voix tout les caracteres de mon fichier log defiler, donc j'en deduit que c'est a ce niveau la que je dois regrouper mes caractere qui sont entourer par des "," mais comment ? avec
strcat
ou
strncat




main.c
#include "prototype.h"

int main(int argc, char *argv[])
{
    printf(".......Analyse de fichier log.......\n\n");

    //Structure
    FichierLog FichierLog;

    methode_1(&FichierLog);

    return 0;
}



methode_1.c
#include "prototype.h"

void methode_1(FichierLog *FichierLog)
{
        FichierLog->fichier_log1 = fopen("./LOG/ArchiveLog/Archive_LOG/local/2016-01-16_2016-02-15.TXT","r");

        //Jouvre mon fichier et ci dessous je compte les lignes
        if (FichierLog->fichier_log2 != NULL)
    {
        int c;
        FichierLog->nb_ligne2 = 0;

        //Comptage des lignes
        while ((c = getc(FichierLog->fichier_log2)) != EOF)
        {
            if (c == '\n')
                ++FichierLog->nb_ligne2;
        }

        //RESULTAT
        printf("Nombre de ligne: %d \n\n",FichierLog->nb_ligne2);

        fclose(FichierLog->fichier_log2);
    }
    else
    {
        printf("Impossible d'ouvrir le ficier log2");
    }

/*
J'ai reproduit le code ci-dessus pour chaque fichier log donc 16Fois. METHODE NUL ET  CHIANTE ET TELLEMENT LONGUE !!! ^^
*/
}


prototpe.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct FichierLog FichierLog;
struct FichierLog
{
int nb_ligne1;
FILE* fichier_log1;

int nb_ligne2;
FILE* fichier_log2;

int nb_ligne3;
FILE* fichier_log3;

int nb_ligne4;
FILE* fichier_log4;

int nb_ligne5;
FILE* fichier_log5;

int nb_ligne6;
FILE* fichier_log6;

int nb_ligne7;
FILE* fichier_log7;

int nb_ligne8;
FILE* fichier_log8;

int nb_ligne9;
FILE* fichier_log9;

int nb_ligne10;
FILE* fichier_log10;

int nb_ligne11;
FILE* fichier_log11;

int nb_ligne12;
FILE* fichier_log12;

int nb_ligne13;
FILE* fichier_log13;

int nb_ligne14;
FILE* fichier_log14;

int nb_ligne15;
FILE* fichier_log15;

int nb_ligne16;
FILE* fichier_log16;
};


void methode_1(FichierLog *FichierLog);




Afficher la suite 
410Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention

11 réponses

Répondre au sujet
yg_be 4126 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - Modifié par yg_be le 25/06/2017 à 15:48
0
Utile
10
bonjour,
je suggère d'utiliser fgets, et pas getc.
as-tu déjà utilisé des tableaux et des structures?
je suggère:
struct FichierLog
{
    int nb_ligne;
    FILE* fichier_log;
}

struct FichierLog fichiers[16];

je pense que ce serait plus simple de traiter un fichier à la fois:
- découvrir un fichier log
- parcourir ce fichier, et enregistrer les lignes intéressantes dans un nouveau fichier
- passer au fichier log suivant
yg_be 4126 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 19:22
je suggère de laisser tomber typedef.

    struct infos_fichier
    {
        int nb_line;
        FILE* jeton;
    };

struct FICHIER_LOG
{
    struct infos_fichier origine;
    struct infos_fichier copie;
};
struct FICHIER_LOG fichiers[100];
poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 20:01
j'ai des erreur du coup ds ma structure:
struct FICHIER_LOG FICHIER_LOG [100];
    struct _ORIGINE
    {
        int nb_line;
        FILE* fichier_log;
    };
    struct _COPY
    {
        int nb_line;
        FILE* fichier_log;
    };
struct FICHIER_LOG
{
    struct _COPY _copy;
    struct _ORIGINE _origine;
};

void methode_2(fichier_log);
void init_methode_2(fichier_log);
 //erreur pour le voidh|79|warning: parameter names (without types) in function declaration|



je la declare comme ca dans le main

FICHIER_LOG fichier_log;


error: array type has incomplete element type|
yg_be 4126 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 20:27
dans le .h:
    struct infos_fichier
    {
        int nb_line;
        FILE* jeton;
    };

struct FICHIER_LOG
{
    struct infos_fichier origine;
    struct infos_fichier copie;
};

dans le main:
struct FICHIER_LOG fichiers[100];
poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 21:18
je pige pas j'ai des bug sur tout le code

error: subscripted value is neither array nor pointer nor vector|

void methode_2(fichier_log)
{
    if (fichier_log[0]->_origine.fichier_log != NULL) //L ecriture n'est pas bonne ?
     {
     }

main.c
struct FICHIER_LOG fichier_log[100];


prototype.h
void methode_2(fichier_log);  
//warning: parameter names (without types) in function declaration|
yg_be 4126 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > poparnassus 410 Messages postés vendredi 28 mars 2014Date d'inscription 9 décembre 2017 Dernière intervention - 25 juin 2017 à 22:06
je te suggère d'utiliser des noms plus clairs pour tes fonctions.
je te suggère aussi d' utiliser des noms différents pour tes types et pour tes variables, et de ne pas utiliser les mêmes noms en majuscules et en minuscules.
void methode_2(struct FICHIER_LOG fichiers[]);
fichiers[0].origine.jeton
Commenter la réponse de yg_be