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

Signaler
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
-
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);




1 réponse

Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
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
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743 >
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019

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];
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
22
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|
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743 >
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019

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];
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
22
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|
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743 >
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019

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