func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName, format2) if err2 != nil { fmt.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName // Подсчитываем, сколько элементов нужно обработать //fmt.Println("Подсчет строк") // _, err := helpers.CountElementsInXML(pathToFile, elementName) // if err != nil { // fmt.Println("Error counting elements in XML file:", err) // return // } //fmt.Println("\nВ ", elementName, " содержится ", countedElements, " строк") xmlFile, err := os.Open(pathToFile) if err != nil { fmt.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { fmt.Println("Error in decode element:", err) return } query := "INSERT INTO " + tableName + " (center_st_id, name) VALUES ($1, $2)" db.MustExec(query, item.CENTERSTID, item.NAME) c <- helpers.PrintRowsAffected(elementName, total) } default: } } //fmt.Printf("\nTotal processed items in "+elementName+": %d \n", total) }
func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() // make sure log.txt exists first // use touch command to create if log.txt does not exist var logFile *os.File var err error if _, err1 := os.Stat("log.txt"); err1 == nil { logFile, err = os.OpenFile("log.txt", os.O_WRONLY, 0666) } else { logFile, err = os.Create("log.txt") } if err != nil { panic(err) } defer logFile.Close() // direct all log messages to log.txt log.SetOutput(logFile) helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName, format2) if err2 != nil { log.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName // Подсчитываем, сколько элементов нужно обработать //fmt.Println("Подсчет строк") // _, err := helpers.CountElementsInXML(pathToFile, elementName) // if err != nil { // fmt.Println("Error counting elements in XML file:", err) // return // } //fmt.Println("\nВ ", elementName, " содержится ", countedElements, " строк") xmlFile, err := os.Open(pathToFile) if err != nil { log.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { log.Println("Error in decode element:", err) return } var err error query := `INSERT INTO ` + tableName + ` (norm_doc_id, doc_name, doc_date, doc_num, doc_type, doc_img_id ) VALUES ($1, $2, $3, $4, $5, $6)` _, err = db.Exec(query, item.NORMDOCID, item.DOCNAME, item.DOCDATE, item.DOCNUM, item.DOCTYPE, item.DOCIMGID) if err != nil { log.Fatal(err) } c <- helpers.PrintRowsAffected(elementName, total) } default: } } }
func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName, format2) if err2 != nil { log.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName xmlFile, err := os.Open(pathToFile) if err != nil { log.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { log.Println("Error in decode element:", err) return } //fmt.Println(item, "\n\n") var err error query := `INSERT INTO ` + tableName + ` (location, postal_code, ifns_fl, terr_ifns_fl, ifns_ul, terr_ifns_ul, okato, oktmo, update_date, land_id, land_guid, ao_guid, start_date, end_date, norm_doc ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)` _, err = db.Exec(query, item.LOCATION, item.POSTALCODE, item.IFNSFL, item.TERRIFNSFL, item.IFNSUL, item.TERRIFNSUL, item.OKATO, item.OKTMO, item.UPDATEDATE, item.LANDID, item.LANDGUID, item.AOGUID, item.STARTDATE, item.ENDDATE, item.NORMDOC) if err != nil { log.Fatal(err) } c <- helpers.PrintRowsAffected(elementName, total) } default: } } }
func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName, format2) if err2 != nil { fmt.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName // Подсчитываем, сколько элементов нужно обработать //fmt.Println("Подсчет строк") // _, err := helpers.CountElementsInXML(pathToFile, elementName) // if err != nil { // fmt.Println("Error counting elements in XML file:", err) // return // } //fmt.Println("\nВ ", elementName, " содержится ", countedElements, " строк") xmlFile, err := os.Open(pathToFile) if err != nil { fmt.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { fmt.Println("Error in decode element:", err) return } //fmt.Println(item, "\n\n") var err error query := `INSERT INTO ` + tableName + ` (postal_code, ifns_fl, terr_ifns_fl, ifns_ul, terr_ifns_ul, okato, oktmo, update_date, int_start, int_end, house_int_id, int_guid, ao_guid, start_date, end_date, int_status, norm_doc, counter ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)` _, err = db.Exec(query, item.POSTALCODE, item.IFNSFL, item.TERRIFNSFL, item.IFNSUL, item.TERRIFNSUL, item.OKATO, item.OKTMO, item.UPDATEDATE, item.INTSTART, item.INTEND, item.HOUSEINTID, item.INTGUID, item.AOGUID, item.STARTDATE, item.ENDDATE, item.INTSTATUS, item.NORMDOC, item.COUNTER) if err != nil { log.Fatal(err) } c <- helpers.PrintRowsAffected(elementName, total) } default: } } //fmt.Printf("Total processed items in AddressObjects: %d \n", total) }
func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() // make sure log.txt exists first // use touch command to create if log.txt does not exist var logFile *os.File var err error if _, err1 := os.Stat("log.txt"); err1 == nil { logFile, err = os.OpenFile("log.txt", os.O_WRONLY, 0666) } else { logFile, err = os.Create("log.txt") } if err != nil { panic(err) } defer logFile.Close() // direct all log messages to log.txt log.SetOutput(logFile) helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName, format2) if err2 != nil { log.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName // Подсчитываем, сколько элементов нужно обработать //fmt.Println("Подсчет строк") // _, err := helpers.CountElementsInXML(pathToFile, elementName) // if err != nil { // fmt.Println("Error counting elements in XML file:", err) // return // } //fmt.Println("\nВ ", elementName, " содержится ", countedElements, " строк") xmlFile, err := os.Open(pathToFile) if err != nil { log.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { log.Println("Error in decode element:", err) return } //fmt.Println(item, "\n\n") var err error query := `INSERT INTO ` + tableName + ` (ao_guid, formal_name, region_code, auto_code, area_code, city_code, ctar_code, place_code, street_code, extr_code, sext_code, off_name, postal_code, ifns_fl, terr_ifns_fl, ifns_ul, terr_ifns_ul, okato, oktmo, update_date, short_name, ao_level, parent_guid, ao_id, prev_id, next_id, code, plain_code, act_status, cent_status, oper_status, curr_status, start_date, end_date, norm_doc, live_status ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36)` _, err = db.Exec(query, item.AOGUID, item.FORMALNAME, item.REGIONCODE, item.AUTOCODE, item.AREACODE, item.CITYCODE, item.CTARCODE, item.PLACECODE, item.STREETCODE, item.EXTRCODE, item.SEXTCODE, item.OFFNAME, item.POSTALCODE, item.IFNSFL, item.TERRIFNSFL, item.IFNSUL, item.TERRIFNSUL, item.OKATO, item.OKTMO, item.UPDATEDATE, item.SHORTNAME, item.AOLEVEL, item.PARENTGUID, item.AOID, item.PREVID, item.NEXTID, item.CODE, item.PLAINCODE, item.ACTSTATUS, item.CENTSTATUS, item.OPERSTATUS, item.CURRSTATUS, item.STARTDATE, item.ENDDATE, item.NORMDOC, item.LIVESTATUS) if err != nil { log.Fatal(err) } c <- helpers.PrintRowsAffected(elementName, total) } default: } } //fmt.Printf("\nВсего в "+elementName+" обработано %d строк\n", total) }
func Export(w *sync.WaitGroup, c chan string, db *sqlx.DB, format *string) { w.Add(1) defer w.Done() helpers.DropAndCreateTable(schema, tableName, db) var format2 string format2 = *format fileName, err2 := helpers.SearchFile(tableName+"_", format2) if err2 != nil { fmt.Println("Error searching file:", err2) return } pathToFile := format2 + "/" + fileName xmlFile, err := os.Open(pathToFile) if err != nil { fmt.Println("Error opening file:", err) return } defer xmlFile.Close() decoder := xml.NewDecoder(xmlFile) total := 0 var inElement string for { // Read tokens from the XML document in a stream. t, _ := decoder.Token() if t == nil { break } // Inspect the type of the token just read. switch se := t.(type) { case xml.StartElement: // If we just read a StartElement token inElement = se.Name.Local if inElement == elementName { total++ var item XmlObject // decode a whole chunk of following XML into the // variable item which is a ActualStatus (se above) err = decoder.DecodeElement(&item, &se) if err != nil { fmt.Println("Error in decode element:", err) return } query := `INSERT INTO ` + tableName + ` (house_guid, postal_code, ifns_fl, terr_ifns_fl, ifns_ul, terr_ifns_ul, okato, oktmo, update_date, house_num, est_status, build_num, struc_num, str_status, house_id, ao_guid, start_date, end_date, stat_status, norm_doc, counter ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21)` db.MustExec(query, item.HOUSEGUID, item.POSTALCODE, item.IFNSFL, item.TERRIFNSFL, item.IFNSUL, item.TERRIFNSUL, item.OKATO, item.OKTMO, item.UPDATEDATE, item.HOUSENUM, item.ESTSTATUS, item.BUILDNUM, item.STRUCNUM, item.STRSTATUS, item.HOUSEID, item.AOGUID, item.STARTDATE, item.ENDDATE, item.STATSTATUS, item.NORMDOC, item.COUNTER) c <- helpers.PrintRowsAffected(elementName, total) } default: } } //fmt.Printf("Total processed items in AddressObjects: %d \n", total) }