Text processing/1: Difference between revisions

Go solution
m (→‎Icon and Unicon: header simplification)
(Go solution)
Line 894:
 
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}}==
1,707

edits