home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
112.lha
/
Files
/
slice.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-20
|
2KB
|
121 lines
/* slice.c 2/17/88 d.wahl, slice selected lines from text file */
#include <ctype.h>
#include <stdio.h>
#define MAXFSIZE 40 /* max chars in filename */
char infile[MAXFSIZE], outfile[MAXFSIZE]; /* global storage */
FILE *source, *destination; /* files */
char match[4][20];
int mlines[4];
int count;
main(argc,argv)
int argc;
char *argv[];
{
if(argc < 5)
{
printf("USAGE: slice infile outfile match #lines [m #] [[m #]] [[[m #]]]");
exit(0);
}
count = ((argc - 5) / 2) + 1;
if(argc >= 5)
{
strcpy(match[0],argv[3]);
mlines[0] = atoi(argv[4]);
}
if(argc >= 7)
{
strcpy(match[1],argv[5]);
mlines[1] = atoi(argv[6]);
}
if(argc >= 9)
{
strcpy(match[2],argv[7]);
mlines[2] = atoi(argv[8]);
}
if(argc == 11)
{
strcpy(match[3],argv[9]);
mlines[3] = atoi(argv[10]);
}
open_files(argv[1],argv[2]);
process_file();
}
open_files(in, out)
char *in, *out;
{
int ret = 1;
/* open files */
if ((source = fopen(in, "r")) == NULL)
{ printf("open source file error\n");
exit(ret);
}
if ((destination = fopen(out, "w")) == NULL)
{ printf("open destination file error\n");
fclose(source);
exit(ret);
}
}
process_file()
{
char buffer[256],verbuffer[5];
register int c,i;
register int p = 0;
/* read a line at a time */
while(( i = fgets(buffer,255,source)) != NULL)
{
for(c = 0;c < count;c++)
{
if(matchstring(buffer,match[c]))
{
fputs(buffer,destination);
for(p = 0;p < mlines[c];p++)
{
fgets(buffer,255,source);
fputs(buffer,destination);
}
break;
}
}
}
c = fclose(source);
c = fclose(destination);
}
/* ********************************************************************** */
/* compare 2 strings, return 1 if strings match */
matchstring(string,match)
char *string;
char *match;
{
int i,c,x;
i = strlen(string);
c = strlen(match);
x = 0;
while(x+c <= i)
{
if(!strncmp(&string[x],match,c))
return(1);
x++;
}
return(0);
}