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
|
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LENGTHMAX 1000
int main(int argc, char **argv)
{
const char debutchaine[] = "occurence";
char * buffer_subtitle=NULL;
char * filenametrad_transitoire = NULL;
const char * filename = NULL;
const char * filename_dest = NULL;
char line_buffer[1000];
size_t arglength = strlen(argv[1]);
/*On recupere la longueur de l'argument*/
FILE * monfichier = NULL;
FILE * monfichier_dest = NULL;
/*déclaration des pointeurs sur flux de fichier*/
/*recopie du nom de fichier*/
filename = malloc(arglength+1);
if(filename==NULL)
printf("erreur d'allocation memoire pour la recopie de l'argument 1\n");
filename = argv[1] ;
/*recopie du nom de fichier*/
printf("extraction des dialogues du fichier : %s\n",filename);
filenametrad_transitoire = calloc(arglength+5,1);
filename_dest = malloc(arglength+5);
if(filename_dest==NULL || filenametrad_transitoire==NULL)
printf("erreur d'allocation memoire sur l'extension de nom de fichier\n");
strncpy(filenametrad_transitoire, filename, arglength+1);
/*arglength+1 pour inclure le caractere de fin de chaine*/
strncat(filenametrad_transitoire, ".out", 4);
filename_dest=filenametrad_transitoire;
printf("le nom du fichier de sortie est %s\n",filename_dest);
free(filenametrad_transitoire);
filenametrad_transitoire=NULL;
monfichier = fopen( filename , "r" );
if(monfichier==NULL)
{
printf("echec a l'ouverture en lecture seule du fichier\n");
}
monfichier_dest = fopen( filename_dest, "w" );
if(monfichier_dest==NULL)
{
printf("erreur d'ouverture en ecriture du fichier de destination\n");
}
/*Boucle d'analyse et d'ecriture dans le fichier ds sous-titre*/
do
{
if(strncmp(line_buffer,debutchaine,8)==0)
{
buffer_subtitle=malloc(strlen(line_buffer)+1);
if(buffer_subtitle==NULL)
printf("erreur d'allocation memoire pour le buffer contenant le sous-titre\n");
strcpy(buffer_subtitle,line_buffer);
printf("on a la chaine :\n%s\npour sous-titre\n", buffer_subtitle);
fputs( (const char *)buffer_subtitle, monfichier_dest );
fputs( "\n", monfichier_dest);
}
free(buffer_subtitle);
}while(fgets(line_buffer, LENGTHMAX-1, monfichier)!=NULL);
free(line_buffer);
fclose(monfichier_dest);
fclose(monfichier);
return 0;
} |