Text processing/1: Difference between revisions

→‎{{header|Go}}: gofmt; simplify error handling; use bufio.Scanner to simplify and remove long line error; use a func literal to reset badRun instead of repeating code (although it was only 4 lines)
(→‎{{header|Java}}: added Java)
(→‎{{header|Go}}: gofmt; simplify error handling; use bufio.Scanner to simplify and remove long line error; use a func literal to reset badRun instead of repeating code (although it was only 4 lines))
Line 1,289:
 
import (
"bufio"
"fmt"
"iolog"
"os"
"strconv"
"strings"
)
 
const (
var fn = "readings.txt"
filename = "readings.txt"
readings = 24 // per line
fields = readings*2 + 1 // per line
)
 
func main() {
f file, err := os.Open(fnfilename)
if err != nil {
fmt log.PrintlnFatal(err)
}
return
defer file.Close()
}
var (
defer f.Close()
badRun, maxRun int
var (
badDate, maxDate string
badRun, maxRun int
fileSum badDate, maxDate stringfloat64
fileAccept int
fileSum float64
)
fileAccept int
endBadRun := func() {
)
if badRun > maxRun {
for lr := bufio.NewReader(f); ; {
maxRun = badRun
line, pref, err := lr.ReadLine()
maxDate = badDate
if err == io.EOF {
}
break
badRun = 0
}
}
if err != nil {
s := bufio.NewScanner(file)
fmt.Println(err)
for s.Scan() {
return
f := strings.Fields(s.Text())
}
if len(f) != fields {
if pref {
log.Fatal("unexpected format,", len(f), "fields.")
fmt.Println("Unexpected long line.")
}
return
var accept int
}
var sum float64
f := strings.Fields(string(line))
for i := 1; i < fields; i if len(f) !+= 492 {
flag, err := strconv.Atoi(f[i+1])
fmt.Println("unexpected format,", len(f), "fields.")
if err != nil {
return
log.Fatal(err)
}
}
var accept int
if flag <= 0 { // value is bad
var sum float64
if badRun++; badRun == 1 {
for i := 1; i < 49; i += 2 {
badDate = f[0]
flag, err := strconv.Atoi(f[i+1])
}
if err != nil {
} else { // value is good
fmt.Println(err)
endBadRun()
return
value, err := strconv.ParseFloat(f[i], 64)
}
if err != nil {
if flag > 0 { // value is good
log.Fatal(err)
if badRun > 0 { // terminate bad run
}
if badRun > maxRun {
sum += value
maxRun = badRun
accept++
maxDate = badDate
}
}
}
badRun = 0
fmt.Printf("Line: %s Reject %2d Accept: %2d Line_tot:%9.3f",
}
f[0], readings-accept, accept, sum)
value, err := strconv.ParseFloat(f[i], 64)
if erraccept !=> nil0 {
fmt.Printf(" Line_avg:%8.3f\n", sum/float64(accept))
fmt.Println(err)
} else {
return
fmt.Println()
}
}
sum += value
fileSum += sum
accept++
fileAccept += accept
} else { // value is bad
}
if badRun == 0 {
if err := s.Err(); err != nil {
badDate = f[0]
log.Fatal(err)
}
}
badRun++
endBadRun()
}
 
}
fmt.Println("\nFile =", filename)
fmt.Printf("Line: %s Reject %2d Accept: %2d Line_tot:%9.3f",
fmt.Printf("Total = %.3f\n", fileSum)
f[0], 24-accept, accept, sum)
fmt.Println("Readings = ", fileAccept)
if accept > 0 {
if fileAccept > 0 {
fmt.Printf(" Line_avg:%8.3f\n", sum/float64(accept))
fmt.Printf("Average = %.3f\n", fileSum/float64(fileAccept))
} else {
}
fmt.Println("")
if maxRun == 0 {
}
fmt.Println("\nAll data valid.")
fileSum += sum
} else {
fileAccept += accept
fmt.Printf("\nMax data gap = %d, beginning on line %s.\n",
}
maxRun, maxDate)
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.\n",
maxRun, maxDate)
}
}</lang>
{{out}}
Anonymous user