|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 2709 (0xa95)
Types: TextFile
Names: »colex.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
└─⟦this⟧ »cph85dist/stat/src/colex.c«
#include "unixstat.h"
PGM (colex,Column Extraction,5.0,1985)
#define MAXCOLS 100
int Forcefill = 0; /* empty fields are filled with ?colex? */
int Quotestrings = 0; /* strings are quoted */
int Ignore = 0; /* missing strings are ignored */
int Lineno = 0; /* input line number */
main (argc, argv) char **argv;
{
char line[BUFSIZ];
int nrequest = 0;
int request[MAXCOLS];
char *input[MAXCOLS];
char *arg;
extern int optind;
extern char *optarg;
int colno, ncols;
int first, last;
int errflg = 0;
int C;
ARGV0;
while ((C = getopt (argc, argv, "qif")) != EOF)
switch (C)
{
default: errflg++; break;
case 'i': Ignore++; break;
case 'f': Forcefill++; break;
case 'q': Quotestrings++; break;
}
if (errflg)
USAGE ([-qif] column numbers)
while (optind < argc)
{
getnums (arg = argv[optind++], &first, &last);
for (colno = first;
first <= last ? colno <= last : colno >= last;
colno += first <= last ? 1 : -1)
{
if (nrequest == MAXCOLS)
ERRMANY (column requests, MAXCOLS)
if (colno <= 0)
ERRMSG1 (Column %d is illegal. Positive columns only, colno)
request[nrequest++] = colno;
}
}
if (nrequest == 0)
ERRMSG0 (No column numbers were supplied)
checkstdin (Argv0);
while (gets (line))
{
Lineno++;
ncols = parseline (line, input, MAXCOLS);
if (ncols > MAXCOLS) ERRMANY (columns in input line, MAXCOLS)
for (colno = 0; colno < nrequest; colno++)
prfield (ncols, input, request[colno]);
putchar ('\n');
}
exit (0);
}
getnums (s, first, last)
char *s; /* string of the form #[-#] */
int *first; /* stuff first column number in here */
int *last; /* stuff last column number in here */
{
char *ptr;
for (ptr = s; *ptr && *ptr != '-'; ptr++);
if (*ptr == '-')
{
*ptr++ = '\0';
if (!INTEGER (s)) ERRNUM (s,first column number)
if (!INTEGER (ptr)) ERRNUM (ptr,second column number)
*first = atoi (s);
*last = atoi (ptr);
}
else
if (!INTEGER (s)) ERRNUM (s,column number)
else *last = *first = atoi (s);
}
prfield (nfields, array, fieldno)
char **array;
{
if (fieldno <= nfields)
printstring (array[fieldno-1]);
else if (Forcefill)
printstring ("?colex?");
else if (Ignore)
{
if (Quotestrings)
printstring ("");
/* else do nothing */
}
else
ERRMSG1 (missing column in short input line %d, Lineno)
}
printstring (string)
char *string;
{
char *s;
char qchar = '"';
if (Quotestrings)
{
for (s = string; *s && *s != qchar; s++);
if (*s) /* the string has a double quote in it so quote with ' */
qchar = '\'';
putchar (qchar);
}
fputs (string, stdout);
if (Quotestrings)
putchar (qchar);
putchar ('\t');
}