Skip to content

Instantly share code, notes, and snippets.

@hankliu5
Created April 2, 2018 02:18
Show Gist options
  • Save hankliu5/ee6f8a10422a0fa664a791008fab52a4 to your computer and use it in GitHub Desktop.
Save hankliu5/ee6f8a10422a0fa664a791008fab52a4 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"strings"
"os"
"bufio"
"io"
"strconv"
"encoding/binary"
"bytes"
)
func main() {
if len(os.Args) < 3 {
fmt.Printf("Usage: %s <infilename> <outfilename>", os.Args[0])
}
infile, err := os.Open(os.Args[1])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer infile.Close()
outfile, err := os.OpenFile(os.Args[2], os.O_RDWR | os.O_CREATE, 0644)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer outfile.Close()
var num_list []float64
var row uint64 = 0
var num_elem uint64 = 0
r := bufio.NewReader(infile)
for {
s, e := r.ReadString('\n')
if e != nil {
if e != io.EOF {
fmt.Println(e)
}
break
}
row += 1
slist := strings.Split(s[:len(s)-1], " ")
for _, element := range slist {
num, _ := strconv.ParseFloat(element, 64)
num_list = append(num_list, num)
num_elem += 1
}
}
var buf bytes.Buffer
binary.Write(&buf, binary.LittleEndian, row)
binary.Write(&buf, binary.LittleEndian, num_elem/row)
for _, element := range num_list {
binary.Write(&buf, binary.LittleEndian, element)
}
outfile.Write(buf.Bytes())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment