#include #include int buf[50][5000]; int numfields; int readquotedfield(int field) { int i, c, quoteon; i=0; quoteon=0; while (1) { c=getchar(); if (c==0) { fprintf(stderr, "bad input\n"); exit(1); } else if (!quoteon && c=='"'){ if (i>0) {fprintf(stderr, "bad input\n"); exit(1); } quoteon=1; buf[field][i++]=c; } else if (quoteon && c=='"') { buf[field][i++]=c; buf[field][i]=0; c=getchar(); if (c==',') return 1; if (c==13) { if (getchar()!=10) { fprintf(stderr, "bad input\n"); exit(1); } return 0; } if (c!='"') { // two quotes in a row become a single embedded quote fprintf(stderr, "bad input\n"); exit(1); }} else if (!quoteon && c==',') { buf[field][i]=0; return 1; } else if (!quoteon && c==13) { if (getchar()!=10) { fprintf(stderr, "bad input\n"); exit(1); } buf[field][i]=0; return 0; } else buf[field][i++]=c; } return 0; } int readquotedline() { int c; c=getchar(); if (c==-1) return 0; ungetc(c, stdin); numfields = 0; while (readquotedfield(numfields++)); return 1; } void printquotedline(int startfield) { int field, i; for (field=startfield;field0 && buf[field][i+1]!=0) putchar('"'); } } if (field=0 && buf[0][s]!=' ') s--; splitpoint = s; i=0; while ((lastname[i++]=buf[0][++s])); s=0; while (s