Text processing/1: Difference between revisions
Content added Content deleted
m (Fixed lang tags.) |
(Add C) |
||
Line 317: | Line 317: | ||
Maximum run(s) of 589 consecutive false readings ends at line starting with date(s): 1993-03-05 |
Maximum run(s) of 589 consecutive false readings ends at line starting with date(s): 1993-03-05 |
||
bash$ </pre> |
bash$ </pre> |
||
=={{header|C}}== |
|||
<lang c>#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
static int badHrs, maxBadHrs; |
|||
static double hrsTot = 0.0; |
|||
static int rdgsTot = 0; |
|||
char bhEndDate[40]; |
|||
int mungeLine( char *line, int lno, FILE *fout ) |
|||
{ |
|||
char date[40], *tkn; |
|||
int dHrs, flag, hrs2, hrs; |
|||
double hrsSum; |
|||
int hrsCnt = 0; |
|||
double avg; |
|||
tkn = strtok(line, "."); |
|||
if (tkn) { |
|||
int n = sscanf(tkn, "%s %d", &date, &hrs2); |
|||
if (n<2) { |
|||
printf("badly formated line - %d %s\n", lno, tkn); |
|||
return 0; |
|||
} |
|||
hrsSum = 0.0; |
|||
while( tkn= strtok(NULL, ".")) { |
|||
n = sscanf(tkn,"%d %d %d", &dHrs, &flag, &hrs); |
|||
if (n>=2) { |
|||
if (flag > 0) { |
|||
hrsSum += 1.0*hrs2 + .001*dHrs; |
|||
hrsCnt += 1; |
|||
if (maxBadHrs < badHrs) { |
|||
maxBadHrs = badHrs; |
|||
strcpy(bhEndDate, date); |
|||
} |
|||
badHrs = 0; |
|||
} |
|||
else { |
|||
badHrs += 1; |
|||
} |
|||
hrs2 = hrs; |
|||
} |
|||
else { |
|||
printf("bad file syntax line %d: %s\n",lno, tkn); |
|||
} |
|||
} |
|||
avg = (hrsCnt > 0)? hrsSum/hrsCnt : 0.0; |
|||
fprintf(fout, "%s Reject: %2d Accept: %2d Average: %7.3f\n", |
|||
date, 24-hrsCnt, hrsCnt, hrsSum/hrsCnt); |
|||
hrsTot += hrsSum; |
|||
rdgsTot += hrsCnt; |
|||
} |
|||
return 1; |
|||
} |
|||
int main(int argc, char*argv[]) |
|||
{ |
|||
FILE *infile, *outfile; |
|||
int lineNo = 0; |
|||
char line[512]; |
|||
char *ifilename = "readings.txt"; |
|||
outfile = fopen("V0.txt", "w"); |
|||
infile = fopen(ifilename, "rb"); |
|||
if (!infile) { |
|||
printf("Can't open %s\n", ifilename); |
|||
exit(1); |
|||
} |
|||
while (NULL != fgets(line, 512, infile)) { |
|||
lineNo += 1; |
|||
if (0 == mungeLine(line, lineNo, outfile)) |
|||
printf("Bad line at %d",lineNo); |
|||
} |
|||
fclose(infile); |
|||
fprintf(outfile, "File: %s\n", ifilename); |
|||
fprintf(outfile, "Total: %.3f\n", hrsTot); |
|||
fprintf(outfile, "Readings: %d\n", rdgsTot); |
|||
fprintf(outfile, "Average: %.3f\n", hrsTot/rdgsTot); |
|||
fprintf(outfile, "\nMaximum number of consecutive bad readings is %d\n", maxBadHrs); |
|||
fprintf(outfile, "Ends on date %s\n", bhEndDate); |
|||
fclose(outfile); |
|||
return 0; |
|||
}</lang> |
|||
Sample output |
|||
<pre>1990-01-01 Reject: 2 Accept: 22 Average: 26.818 |
|||
1990-01-02 Reject: 0 Accept: 24 Average: 17.083 |
|||
1990-01-03 Reject: 0 Accept: 24 Average: 58.958 |
|||
1990-01-04 Reject: 0 Accept: 24 Average: 75.000 |
|||
1990-01-05 Reject: 0 Accept: 24 Average: 47.083 |
|||
... |
|||
File: readings.txt |
|||
Total: 1358393.400 |
|||
Readings: 129403 |
|||
Average: 10.497 |
|||
Maximum number of consecutive bad readings is 589 |
|||
Ends on date 1993-03-05</pre> |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |