Text processing/1: Difference between revisions

Add C
m (Fixed lang tags.)
(Add C)
Line 317:
Maximum run(s) of 589 consecutive false readings ends at line starting with date(s): 1993-03-05
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}}==
Anonymous user