mirror of
https://github.com/nxshock/mssqlbulkloader.git
synced 2025-04-20 22:21:52 +05:00
Compare commits
No commits in common. "main" and "v0.0.2" have entirely different histories.
@ -41,10 +41,8 @@ func (ft FieldType) ParseValue(reader Reader, s string) (any, error) {
|
|||||||
return s, nil
|
return s, nil
|
||||||
case Integer:
|
case Integer:
|
||||||
return strconv.ParseInt(s, 10, 64)
|
return strconv.ParseInt(s, 10, 64)
|
||||||
case Float, Money:
|
case Float:
|
||||||
s = strings.ReplaceAll(s, ",", ".")
|
return strconv.ParseFloat(strings.ReplaceAll(s, ",", "."), 64)
|
||||||
s = strings.ReplaceAll(s, " ", "")
|
|
||||||
return strconv.ParseFloat(s, 64)
|
|
||||||
case Date:
|
case Date:
|
||||||
if i, ok := reader.(CustomDateParser); ok {
|
if i, ok := reader.(CustomDateParser); ok {
|
||||||
t, err := i.ParseDate(s)
|
t, err := i.ParseDate(s)
|
||||||
@ -79,7 +77,7 @@ func (ft FieldType) SqlFieldType() string {
|
|||||||
case Float:
|
case Float:
|
||||||
return "float"
|
return "float"
|
||||||
case Money:
|
case Money:
|
||||||
return "numeric(15, 2)" // TODO: https://github.com/denisenkom/go-mssqldb/issues/460
|
panic("do not implemented - see https://github.com/denisenkom/go-mssqldb/issues/460") // TODO: https://github.com/denisenkom/go-mssqldb/issues/460
|
||||||
case Date:
|
case Date:
|
||||||
return "date"
|
return "date"
|
||||||
case Timestamp:
|
case Timestamp:
|
||||||
|
@ -35,7 +35,6 @@ func newCsvReader(r io.Reader, options *Options) (*CsvReader, error) {
|
|||||||
re := csv.NewReader(bufReader)
|
re := csv.NewReader(bufReader)
|
||||||
re.Comma = options.comma
|
re.Comma = options.comma
|
||||||
re.FieldsPerRecord = len(options.fieldsTypes)
|
re.FieldsPerRecord = len(options.fieldsTypes)
|
||||||
re.LazyQuotes = true
|
|
||||||
|
|
||||||
csvReader := &CsvReader{
|
csvReader := &CsvReader{
|
||||||
reader: re,
|
reader: re,
|
||||||
|
@ -17,7 +17,7 @@ func TestCsvReaderBasic(t *testing.T) {
|
|||||||
encoding: "win1251",
|
encoding: "win1251",
|
||||||
comma: rune(";"[0]),
|
comma: rune(";"[0]),
|
||||||
skipRows: 3,
|
skipRows: 3,
|
||||||
fieldsTypes: "s ttmmsssss",
|
fieldsTypes: "s ttffsssss",
|
||||||
dateFormat: "02.01.2006",
|
dateFormat: "02.01.2006",
|
||||||
timestampFormat: "02.01.2006 15:04:05",
|
timestampFormat: "02.01.2006 15:04:05",
|
||||||
timezone: time.Local}
|
timezone: time.Local}
|
||||||
@ -34,41 +34,7 @@ func TestCsvReaderBasic(t *testing.T) {
|
|||||||
t2 := time.Date(2023, 03, 20, 0, 0, 0, 0, time.Local)
|
t2 := time.Date(2023, 03, 20, 0, 0, 0, 0, time.Local)
|
||||||
assert.Equal(t, []any{"307814009186", t1, t2, 499.00, 488.52, "522598******7141", "REZE64", "Покупка", "35068281112", "307817403283"}, row)
|
assert.Equal(t, []any{"307814009186", t1, t2, 499.00, 488.52, "522598******7141", "REZE64", "Покупка", "35068281112", "307817403283"}, row)
|
||||||
|
|
||||||
_, err = csvReader.GetRow(false)
|
|
||||||
assert.Equal(t, err, io.EOF)
|
|
||||||
|
|
||||||
err = csvReader.Close()
|
|
||||||
assert.NoError(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCsvReaderBasicQuotes(t *testing.T) {
|
|
||||||
f, err := os.Open("testdata/csv/9729337841_20032023_084313668.csv")
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
options := &Options{
|
|
||||||
encoding: "utf8",
|
|
||||||
comma: rune(";"[0]),
|
|
||||||
fieldsTypes: "s ",
|
|
||||||
dateFormat: "02.01.2006",
|
|
||||||
timestampFormat: "02.01.2006 15:04:05",
|
|
||||||
timezone: time.Local}
|
|
||||||
|
|
||||||
csvReader, err := NewCsvReader(f, options)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
assert.Equal(t, []string{"Территориальный банк"}, csvReader.GetHeader())
|
|
||||||
|
|
||||||
row, err := csvReader.GetRow(false)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
assert.Equal(t, []any{`ПАО "Сбербанк"`}, row)
|
|
||||||
|
|
||||||
row, err = csvReader.GetRow(false)
|
row, err = csvReader.GetRow(false)
|
||||||
assert.NoError(t, err)
|
|
||||||
|
|
||||||
assert.Equal(t, []any{`ПАО "Сбербанк"`}, row)
|
|
||||||
|
|
||||||
_, err = csvReader.GetRow(false)
|
|
||||||
assert.Equal(t, err, io.EOF)
|
assert.Equal(t, err, io.EOF)
|
||||||
|
|
||||||
err = csvReader.Close()
|
err = csvReader.Close()
|
||||||
|
@ -14,7 +14,7 @@ func TestDbfReaderBasic(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
options := &Options{
|
options := &Options{
|
||||||
fieldsTypes: "sssssstdmmsss",
|
fieldsTypes: "sssssstdffsss",
|
||||||
timezone: time.Local,
|
timezone: time.Local,
|
||||||
encoding: "cp866"}
|
encoding: "cp866"}
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ func TestDbfReaderBasic(t *testing.T) {
|
|||||||
t2 := time.Date(2023, 02, 21, 0, 0, 0, 0, time.Local)
|
t2 := time.Date(2023, 02, 21, 0, 0, 0, 0, time.Local)
|
||||||
assert.Equal(t, []any{"719089383780", "44", "8644", "570000009312", "STOLOVAYA TSPP", "844417", t1, t2, 1757.08, 1713.15, "536829XXXXXX9388", "UM1TS8", "D"}, row)
|
assert.Equal(t, []any{"719089383780", "44", "8644", "570000009312", "STOLOVAYA TSPP", "844417", t1, t2, 1757.08, 1713.15, "536829XXXXXX9388", "UM1TS8", "D"}, row)
|
||||||
|
|
||||||
_, err = dbfReader.GetRow(false)
|
row, err = dbfReader.GetRow(false)
|
||||||
assert.Equal(t, err, io.EOF)
|
assert.Equal(t, err, io.EOF)
|
||||||
|
|
||||||
err = dbfReader.Close()
|
err = dbfReader.Close()
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
Территориальный банк;ГОСБ;Номер мерчанта;Наименование ТСТ;Номер терминала;Дата операции;Дата ПП;Сумма операции;Сумма расчета;Номер карты;Код авторизации;Тип операции;Доп. информация_1;Доп. информация_2
|
|
||||||
"ПАО ""Сбербанк""";Киевское ОСБ;781000815902;WINK;28403560;19.03.2023 17:49:35;20.03.2023 00:00:00;499,00;488,52;522598******7141;REZE64;Покупка;35068281112;307817403283
|
|
||||||
ПАО "Сбербанк";Киевское ОСБ;781000815902;WINK;28403560;19.03.2023 17:49:35;20.03.2023 00:00:00;499,00;488,52;522598******7141;REZE64;Покупка;35068281112;307817403283
|
|
Can't render this file because it contains an unexpected character in line 3 and column 8.
|
Loading…
x
Reference in New Issue
Block a user