Skip to content

Commit ea8e991

Browse files
committed
refactored and optimized using buffer
1 parent 65e1d8f commit ea8e991

File tree

4 files changed

+59
-37
lines changed

4 files changed

+59
-37
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ _testmain.go
2424
data/bigdata/
2525
debug.test
2626
.vscode
27-
debug
27+
debug
28+
.idea/

godiff.go

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ var (
224224
flag_max_goroutines = 1
225225
flag_p_keys string
226226
flag_html_output string = "diff.html"
227+
flag_txt_output string = "diff.txt"
227228
flag_csv_delta string = "delta.csv"
228229
)
229230

@@ -244,8 +245,10 @@ var regexp_exclude_files *regexp.Regexp
244245

245246
// Buffered stdout
246247
var (
247-
out *bufio.Writer
248-
out_lock sync.Mutex
248+
out *bufio.Writer
249+
out_lock sync.Mutex
250+
outputFile *os.File
251+
errF error
249252
)
250253

251254
// html entity strings
@@ -306,7 +309,8 @@ func main() {
306309
flag.BoolVar(&flag_suppress_line_changes, "l", flag_suppress_line_changes, "Do not display changes within lines")
307310
flag.BoolVar(&flag_suppress_missing_file, "m", flag_suppress_missing_file, "Do not show content if corresponding file is missing")
308311
flag.BoolVar(&flag_unified_context, "u", flag_unified_context, "Unified context")
309-
flag.BoolVar(&flag_output_as_text, "n", flag_output_as_text, "Output using 'diff' text format instead of HTML")
312+
flag.BoolVar(&flag_output_as_text, "txt", flag_output_as_text, "Output using 'diff' text format instead of HTML")
313+
flag.StringVar(&flag_txt_output, "n", flag_txt_output, "Generate given txt diff file")
310314

311315
flag.StringVar(&flag_p_keys, "key", "", "The Primary Key Columns")
312316
flag.StringVar(&flag_html_output, "html", flag_html_output, "Generate HTML diff file")
@@ -316,12 +320,20 @@ func main() {
316320

317321
flag.Parse()
318322

319-
output_html_file, err := os.Create(flag_html_output)
320-
if err != nil {
321-
usage(err.Error())
323+
if flag_txt_output != "diff.txt" {
324+
flag_output_as_text = true
325+
}
326+
327+
if flag_output_as_text {
328+
outputFile, errF = os.Create(flag_txt_output)
329+
} else {
330+
outputFile, errF = os.Create(flag_html_output)
322331
}
323332

324-
out = bufio.NewWriterSize(output_html_file, OUTPUT_BUF_SIZE)
333+
if errF != nil {
334+
usage(errF.Error())
335+
}
336+
out = bufio.NewWriterSize(outputFile, OUTPUT_BUF_SIZE)
325337

326338
if flag_version {
327339
version()
@@ -349,7 +361,7 @@ func main() {
349361
// flush output on termination
350362
defer func() {
351363
out.Flush()
352-
output_html_file.Close()
364+
outputFile.Close()
353365
}()
354366

355367
// choose which compare and hash function to use
@@ -1250,9 +1262,7 @@ func sortCsv(fname string) (string, os.FileInfo) {
12501262
file, err := os.Open(fname)
12511263
defer file.Close()
12521264

1253-
if strings.HasSuffix(fname, ".colreordered") {
1254-
defer os.Remove(fname)
1255-
}
1265+
defer removeFile(fname, ".colreordered")
12561266

12571267
fnameSorted := fname + ".sorted"
12581268
wfile, err := os.Create(fnameSorted)
@@ -1363,9 +1373,7 @@ func open_file(fname string, finfo os.FileInfo) *Filedata {
13631373
// Close file (and umap it)
13641374
func (file *Filedata) close_file() {
13651375

1366-
if strings.HasSuffix(file.name, ".sorted") {
1367-
defer os.Remove(file.name)
1368-
}
1376+
defer removeFile(file.name, ".sorted")
13691377

13701378
if file.osfile != nil {
13711379
if file.is_mapped && file.data != nil {
@@ -1377,6 +1385,12 @@ func (file *Filedata) close_file() {
13771385
file.data = nil
13781386
}
13791387

1388+
func removeFile(fileName string, ext string) {
1389+
if strings.HasSuffix(fileName, ext) {
1390+
os.Remove(fileName)
1391+
}
1392+
}
1393+
13801394
// check if file is binary
13811395
func (file *Filedata) check_binary() {
13821396
if file.data == nil {

htmlgen.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,6 @@ func writeDiffToCSV(buf []byte) {
237237
usage(err.Error())
238238
}
239239
defer output_csv_file.Close()
240-
241240
outCSV := bufio.NewWriter(output_csv_file)
242241
outCSV.WriteString(strings.Join(csvHeaderData, ","))
243242
outCSV.WriteString("\n")

utils/csvutils.go

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,68 @@
11
package utils
22

33
import (
4+
"bufio"
5+
"bytes"
46
"encoding/csv"
57
"fmt"
68
"os"
9+
"strings"
710
)
811

912
//ColumnReorder is to reorder the CSV columns
1013
func ColumnReorder(filePath string, columns []int) {
11-
file, err := os.Open(filePath)
12-
defer file.Close()
1314

15+
buf := bytes.Buffer{}
16+
//defer buf.Reset()
17+
18+
file, err := os.Open(filePath)
1419
if err != nil {
1520
_ = fmt.Errorf("error in reading file %s", err)
1621
}
22+
defer file.Close()
1723

1824
reader := csv.NewReader(file)
1925
var newColumn []string
2026

21-
writer, wFile := getWriter(filePath)
22-
defer wFile.Close()
27+
/*writer, wFile := getWriter(filePath)
28+
defer wFile.Close()*/
2329

2430
for line, err := reader.Read(); err == nil; line, err = reader.Read() {
2531
for _, v := range columns {
2632
newColumn = append(newColumn, line[v])
2733
}
2834

29-
if err = writer.Write(newColumn); err != nil {
35+
if _, err = buf.WriteString(strings.Join(newColumn, ",") + "\n"); err != nil {
3036
fmt.Println("Error:", err)
3137
break
3238
}
33-
writer.Flush()
39+
40+
/*if err = writer.Write(newColumn); err != nil {
41+
fmt.Println("Error:", err)
42+
break
43+
}
44+
writer.Flush()*/
45+
3446
newColumn = newColumn[:0]
3547
}
36-
}
3748

38-
/*func writeDiffCSVDelta(buf *bytes.Buffer, line []byte) {
39-
buf.Write(line)
40-
buf.WriteString("\n")
49+
writeToFile(filePath+".colreordered", buf.Bytes())
4150
}
4251

4352
func writeToFile(filePath string, buf []byte) {
44-
wFile, err := os.Create(filePath) //".colreordered"
53+
wFile, err := os.Create(filePath)
4554
if err != nil {
46-
usage(err.Error())
55+
fmt.Println("writeToFile Error: ", err)
56+
return
4757
}
48-
defer output_csv_file.Close()
58+
defer wFile.Close()
4959

50-
outCSV := bufio.NewWriter(output_csv_file)
51-
outCSV.WriteString(strings.Join(csvHeaderData, ","))
52-
outCSV.WriteString("\n")
53-
outCSV.Write(buf)
54-
outCSV.Flush()
55-
}*/
60+
outFile := bufio.NewWriter(wFile)
61+
outFile.Write(buf)
62+
outFile.Flush()
63+
}
5664

57-
func getWriter(filePath string) (*csv.Writer, *os.File) {
65+
/*func getWriter(filePath string) (*csv.Writer, *os.File) {
5866
// Creating csv writer
5967
wFile, err := os.Create(filePath + ".colreordered")
6068
if err != nil {
@@ -64,7 +72,7 @@ func getWriter(filePath string) (*csv.Writer, *os.File) {
6472
6573
writer := csv.NewWriter(wFile)
6674
return writer, wFile
67-
}
75+
}*/
6876

6977
//GetColumnCount : return the CSV column count
7078
func GetColumnCount(filePath string) int {

0 commit comments

Comments
 (0)