Text processing/1: Difference between revisions
Content added Content deleted
m (→Icon and Unicon: header simplification) |
(Go solution) |
||
Line 894: | Line 894: | ||
main bye</lang> |
main bye</lang> |
||
=={{header|Go}}== |
|||
<lang go>package main |
|||
import ( |
|||
"bufio" |
|||
"encoding/line" |
|||
"fmt" |
|||
"os" |
|||
"strconv" |
|||
"strings" |
|||
) |
|||
var fn = "readings.txt" |
|||
func main() { |
|||
f, err := os.Open(fn, os.O_RDONLY, 0) |
|||
if err != nil { |
|||
fmt.Println(err) |
|||
return |
|||
} |
|||
defer f.Close() |
|||
var ( |
|||
badRun, maxRun int |
|||
badDate, maxDate string |
|||
fileSum float64 |
|||
fileAccept int |
|||
) |
|||
for lr := line.NewReader(bufio.NewReader(f), 300); ; { |
|||
line, pref, err := lr.ReadLine() |
|||
if err != nil { |
|||
fmt.Println(err) |
|||
return |
|||
} |
|||
if pref { |
|||
fmt.Println("unexpected format, line > 300 bytes.") |
|||
return |
|||
} |
|||
f := strings.Fields(string(line)) |
|||
if len(f) == 0 { |
|||
break // file ends with blank line |
|||
} |
|||
if len(f) != 49 { |
|||
fmt.Println("unexpected format,", len(f), "fields.") |
|||
return |
|||
} |
|||
var accept int |
|||
var sum float64 |
|||
for i := 1; i < 49; i += 2 { |
|||
flag, err := strconv.Atoi(f[i+1]) |
|||
if err != nil { |
|||
fmt.Println(err) |
|||
return |
|||
} |
|||
if flag > 0 { // value is good |
|||
if badRun > 0 { // terminate bad run |
|||
if badRun > maxRun { |
|||
maxRun = badRun |
|||
maxDate = badDate |
|||
} |
|||
badRun = 0 |
|||
} |
|||
value, err := strconv.Atof64(f[i]) |
|||
if err != nil { |
|||
fmt.Println(err) |
|||
return |
|||
} |
|||
sum += value |
|||
accept++ |
|||
} else { // value is bad |
|||
if badRun == 0 { |
|||
badDate = f[0] |
|||
} |
|||
badRun++ |
|||
} |
|||
} |
|||
fmt.Printf("Line: %s Reject %2d Accept: %2d Line_tot:%9.3f", |
|||
f[0], 24-accept, accept, sum) |
|||
if accept > 0 { |
|||
fmt.Printf(" Line_avg:%8.3f\n", sum/float64(accept)) |
|||
} else { |
|||
fmt.Println("") |
|||
} |
|||
fileSum += sum |
|||
fileAccept += accept |
|||
} |
|||
fmt.Println("\nFile =", fn) |
|||
fmt.Printf("Total = %.3f\n", fileSum) |
|||
fmt.Println("Readings = ", fileAccept) |
|||
if fileAccept > 0 { |
|||
fmt.Printf("Average = %.3f\n", fileSum/float64(fileAccept)) |
|||
} |
|||
if badRun > 0 && badRun > maxRun { |
|||
maxRun = badRun |
|||
maxDate = badDate |
|||
} |
|||
if maxRun == 0 { |
|||
fmt.Println("\nAll data valid.") |
|||
} else { |
|||
fmt.Printf("\nMax data gap = %d, beginning on line %s.", |
|||
maxRun, maxDate) |
|||
} |
|||
}</lang> |
|||
Output: |
|||
<pre> |
|||
... |
|||
Line: 2004-12-28 Reject 1 Accept: 23 Line_tot: 77.800 Line_avg: 3.383 |
|||
Line: 2004-12-29 Reject 1 Accept: 23 Line_tot: 56.300 Line_avg: 2.448 |
|||
Line: 2004-12-30 Reject 1 Accept: 23 Line_tot: 65.300 Line_avg: 2.839 |
|||
Line: 2004-12-31 Reject 1 Accept: 23 Line_tot: 47.300 Line_avg: 2.057 |
|||
File = readings.txt |
|||
Total = 1358393.400 |
|||
Readings = 129403 |
|||
Average = 10.497 |
|||
Max data gap = 589, beginning on line 1993-02-09. |
|||
</pre> |
|||
=={{header|Haskell}}== |
=={{header|Haskell}}== |