Recuperer des chemin de fichier et analyser ces fichiers
Résolu
poparnassus
Messages postés
462
Statut
Membre
-
yg_be Messages postés 24281 Statut Contributeur -
yg_be Messages postés 24281 Statut Contributeur -
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:
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 ","
Je ne connaissais pas la fonction getc()
main.c
methode_1.c
prototpe.c
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()
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
while ((c = getc(FichierLog->fichier_log2)) != EOF)
{
if (c == '\n')
++FichierLog->nb_ligne2;
printf("c: %s",c);
systeme("PAUSE");
}
strcatou
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);
A voir également:
- Recuperer des chemin de fichier et analyser ces fichiers
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
bonjour,
je suggère d'utiliser fgets, et pas getc.
as-tu déjà utilisé des tableaux et des structures?
je suggère:
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
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
En faite si je comprends bien, il faut faire un premier tableau stocker dans une structure, pour qu'il soit accesible depuis toute mes fonctions:
C0: indice
C1: Chemin d'acces du fichier original
C2: Nbr de ligne
C3: Chemin d'acces du fichier copier
C4; Nbr de ligne
Le nombre de x ligne pour le nombre de fichier log trouver.
si je veux un tableau de 7 colonne et de n ligne, où n est definie par la boucle while et stocker dans la variable nb_ligne:
Oui cest plus judicieu de traiter un fichier, et puispasser au suivant
https://openclassrooms.com/courses/parcourir-les-dossiers-avec-dirent-h
prototype.h
main.c
methode_2.c