1
+ #include <stdio.h>
2
+ #include <errno.h>
3
+ #include <stdlib.h>
4
+ #include <strings.h>
5
+ #include <assert.h>
6
+
7
+ #define ERROR -100
8
+ #define BUFFER_SIZE 100*10
9
+ #define NO_KEYWORD_FOUND -1
10
+ #define KEYWORD_ONE_FOUND_FIRST 1
11
+ #define KEYWORD_TWO_FOUND_FIRST 2
12
+
13
+ typedef struct fileparser
14
+ {
15
+ FILE * file_pointer ;
16
+ char * buffer ;
17
+ }FileParser ;
18
+
19
+ FileParser * createParser (char * file_name );
20
+ int searchFileForKeywords (FileParser * parser );
21
+ void cleanupParser (FileParser * parser );
22
+
23
+ int parseFile (char * file_name )
24
+ {
25
+ int return_value ;
26
+ FileParser * parser = createParser (file_name );
27
+ return_value = searchFileForKeywords (parser );
28
+ cleanupParser (parser );
29
+ return return_value ;
30
+ }
31
+
32
+ int searchFileForKeywords (FileParser * parser )
33
+ {
34
+ if (parser == NULL )
35
+ {
36
+ return ERROR ;
37
+ }
38
+ while (fgets (parser -> buffer , BUFFER_SIZE , parser -> file_pointer )!= NULL )
39
+ {
40
+ if (strcmp ("KEYWORD_ONE\n" , parser -> buffer )== 0 )
41
+ {
42
+ return KEYWORD_ONE_FOUND_FIRST ;
43
+ }
44
+ if (strcmp ("KEYWORD_TWO\n" , parser -> buffer )== 0 )
45
+ {
46
+ return KEYWORD_TWO_FOUND_FIRST ;
47
+ }
48
+ }
49
+ return NO_KEYWORD_FOUND ;
50
+ }
51
+
52
+ FileParser * createParser (char * file_name )
53
+ {
54
+ assert (file_name != NULL && "Недопустимое имя файла" );
55
+ FileParser * parser = malloc (sizeof (FileParser ));
56
+ if (parser )
57
+ {
58
+ parser -> file_pointer = fopen (file_name , "r" );
59
+ parser -> buffer = malloc (BUFFER_SIZE );
60
+ if (!parser -> file_pointer || !parser -> buffer )
61
+ {
62
+ cleanupParser (parser );
63
+ return NULL ;
64
+ }
65
+ }
66
+ return parser ;
67
+ }
68
+
69
+ void cleanupParser (FileParser * parser )
70
+ {
71
+ if (parser )
72
+ {
73
+ if (parser -> buffer )
74
+ {
75
+ free (parser -> buffer );
76
+ }
77
+ if (parser -> file_pointer )
78
+ {
79
+ fclose (parser -> file_pointer );
80
+ }
81
+ free (parser );
82
+ }
83
+ }
84
+
85
+ int main (int argc , char * argv [])
86
+ {
87
+ if (argv [1 ]!= NULL ) printf ("%d\n" , parseFile (argv [1 ]));
88
+ else printf ("Нужно имя файла\n" );
89
+
90
+ return 0 ;
91
+ }
0 commit comments