Exemplo n.º 1
0
        public void WriteGB2312()
        {
            var dbf = new Dbf(encoding);

            fields.ForEach(x => dbf.Fields.Add(x));

            DbfRecord record = dbf.CreateRecord();

            foreach (var field in fields)
            {
                object item = null;
                try
                {
                    item = data[field.Name];
                }
                catch (Exception)
                {
                    // ignored
                }

                record.Data[fields.IndexOf(field)] = item;
            }

            // Act.
            dbf.Write("test.dbf", DbfVersion.FoxBaseDBase3NoMemo);

            // Assert.
            var dbfTest = new Dbf(encoding);

            dbfTest.Read("test.dbf");
            var rowStd = dbfTest.Records[0];

            Assert.AreEqual(rowStd["中文字段"], "股票代码");
            Assert.AreEqual(rowStd["中文字段2"], "股票代码股");      //should be truncated to 10 bytes
        }
Exemplo n.º 2
0
        public List <Payment> Parser(int branchOfficeId, PaymentChannel paymentChannel, IFormFile file)
        {
            var listPayments = new List <Payment>();

            using var ms = new MemoryStream();
            file.CopyTo(ms);
            var dbf = new Dbf(Encoding.GetEncoding(866));

            dbf.Read(ms);

            var recordList = paymentChannel.TotalRecord == FileTotalRow.Last
                ? dbf.Records.GetRange(0, dbf.Records.Count - 1)
                : dbf.Records.GetRange(Convert.ToInt16(paymentChannel.TotalRecord), dbf.Records.Count - Convert.ToInt16(paymentChannel.TotalRecord));

            foreach (DbfRecord record in recordList)
            {
                listPayments.Add(
                    new Payment(
                        DateTime.ParseExact(record[paymentChannel.DateFieldName].ToString(), paymentChannel.TextDateFormat, new CultureInfo(CultureInfo.CurrentCulture.ToString())),
                        Convert.ToDecimal(record[paymentChannel.SumFieldName].ToString()),
                        _branchOfficeService.GetOne(branchOfficeId).CurrentPeriodId,
                        paymentChannel.PaymentsType,
                        string.Join(" ", paymentChannel.PersonFieldName.Split("+").Select(x => record[x]).ToList()),
                        _ercContext.AccountingPoints.FirstOrDefault(x => x.Name == record[paymentChannel.RecordpointFieldName.Trim()].ToString())?.Id,
                        record[paymentChannel.RecordpointFieldName].ToString()
                        )
                    );
            }

            return(listPayments);
        }
Exemplo n.º 3
0
        public void testInit()
        {
            dbf = new Dbf();

            using (FileStream baseStream = File.Open("fixtures/83/dbase_83.dbf", FileMode.Open, FileAccess.Read))
                using (FileStream memoStream = File.Open("fixtures/83/dbase_83.dbt", FileMode.Open, FileAccess.Read))
                    dbf.Read(baseStream, memoStream);
        }
Exemplo n.º 4
0
        private Dbf ReadBrokenFields()
        {
            var dbf = new Dbf();

            dbf.Read("fixtures/fields/POST986.dbf");

            return(dbf);
        }
Exemplo n.º 5
0
        private Dbf ReadStandard()
        {
            var standard = new Dbf(encoding);

            standard.Read("fixtures/CP866/SPXXXX0159.dbf");

            return(standard);
        }
Exemplo n.º 6
0
        public void WriteOneField()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.Character, 12);

            dbf.Fields.Add(field);
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual("TEST", dbf.Fields[0].Name, "Field name should be TEST.");
        }
Exemplo n.º 7
0
        public void Parse()
        {
            logger.Info("Parsing file {0}", SourceFileName);

            if (RootNode == null)
            {
                RootNode = new XElement(XMLRootName);
            }


            Dbf dbf = new Dbf();

            try
            {
                dbf.Read(this.SourceFileName);
                ParseHeader(dbf);

                logger.Trace("Parsing dbf records");

                for (int row = 0; row < dbf.Records.Count; row++)
                {
                    RecordCount = row;

                    XElement node = new XElement("Item");
                    RootNode.Add(node);

                    for (int column = 0; column < dbf.Records[row].Data.Count; column++)
                    {
                        string cell = null;
                        if (dbf.Records[row].Data[column] == null)
                        {
                            cell = "null";
                        }
                        else
                        {
                            cell = dbf.Records[row].Data[column].ToString();
                        }

                        node.Add(new XElement(Headers[column], cell));
                    }
                }

                logger.Trace("DBF file is parsed successfully RecordCount {0}", RecordCount);
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"DBF file parsing error {SourceFileName}");
                throw new Exception($"DBF file parsing error {SourceFileName} Error:" + ex.Message);
            }
        }
Exemplo n.º 8
0
        public void DateTimeField()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.DateTime, 8);

            dbf.Fields.Add(field);
            DbfRecord record = dbf.CreateRecord();

            record.Data[0] = new DateTime(2018, 8, 7, 20, 15, 8);
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual(new DateTime(2018, 8, 7, 20, 15, 8), dbf.Records[0][0], "Record content should be 2018-08-07 20:15:08.");
        }
Exemplo n.º 9
0
        public void LogicalField()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.Logical, 12);

            dbf.Fields.Add(field);
            DbfRecord record = dbf.CreateRecord();

            record.Data[0] = true;
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual(true, dbf.Records[0][0], "Record content should be TRUE.");
        }
Exemplo n.º 10
0
        public void WriteFieldAndRecord()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.Character, 12);

            dbf.Fields.Add(field);
            DbfRecord record = dbf.CreateRecord();

            record.Data[0] = "HELLO";
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual("HELLO", dbf.Records[0][0], "Record content should be HELLO.");
        }
Exemplo n.º 11
0
        public void NumericField()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.Numeric, 12, 2);

            dbf.Fields.Add(field);
            DbfRecord record = dbf.CreateRecord();

            record.Data[0] = 3.14;
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual(3.14, dbf.Records[0][0], "Record content should be 3.14.");
        }
Exemplo n.º 12
0
        public void CurrencyField()
        {
            dbf = new Dbf();
            DbfField field = new DbfField("TEST", DbfFieldType.Currency, 4);

            dbf.Fields.Add(field);
            DbfRecord record = dbf.CreateRecord();

            record.Data[0] = 4.34F;
            dbf.Write("test.dbf", DbfVersion.VisualFoxPro);

            dbf = new Dbf();
            dbf.Read("test.dbf");

            Assert.AreEqual((float)4.34, dbf.Records[0][0], "Record content should be 4.34.");
        }
Exemplo n.º 13
0
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Encoding encoding = System.Text.Encoding.GetEncoding("big5");


            Dbf dbf = new Dbf(encoding);

            dbf.Read(@"C:\Users\coder\Desktop\data\shp_bah.dbf");

            foreach (DbfRecord record in dbf.Records)
            {
                for (int i = 0; i < dbf.Fields.Count; i++)
                {
                    Console.WriteLine(record[i]);
                }
            }
            Console.WriteLine(dbf.Records.Count);

            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
Exemplo n.º 14
0
        public static WorkflowFile LoadFromDbfFile(string filePath, DbfLoadingOptions options)
        {
            CheckExtension(filePath, ".dbf");

            var content = new XDocument();

            content.Add(new XElement(options.XmlRootName));

            using (var fileStream = ReadFile(filePath))
            {
                var parser = new Dbf(options.FileEncoding);
                parser.Read(fileStream);

                // Parse headers
                var headers = ParserBase.GetCleanHeaders(parser.Fields.Select(field => field.Name).ToArray());

                for (int row = 0; row < parser.Records.Count; row++)
                {
                    var node = new XElement("Item");
                    content.Add(node);

                    for (int column = 0; column < parser.Records[row].Data.Count; column++)
                    {
                        if (parser.Records[row].Data[column] == null)
                        {
                            node.Add(new XElement(headers[column], "null"));

                            continue;
                        }

                        node.Add(new XElement(headers[column], parser.Records[row].Data[column].ToString()));
                    }
                }
            }

            return(new WorkflowFile(filePath, content));
        }
Exemplo n.º 15
0
 public void testInit()
 {
     dbf = new Dbf();
     dbf.Read("fixtures/31/dbase_31.dbf");
 }
Exemplo n.º 16
0
 public void testInit()
 {
     dbf = new Dbf();
     dbf.Read("fixtures/83/dbase_83.dbf");
 }
Exemplo n.º 17
0
 public void testInit()
 {
     dbf = new Dbf();
     dbf.Read("fixtures/f5/dbase_f5.dbf");
 }
        public static DataTable ReadDBFfile(string filePath, int monthIndex)
        {
            var dbf = new Dbf();

            dbf.Read(filePath);
            var dt = new DataTable();


            //return dt;

            // Cols
            for (int i = 0; i < dbf.Fields.Count; i++)
            {
                dt.Columns.Add(dbf.Fields[i].Name, dbf.Fields[i].GetType().GetProperties()[0].PropertyType);
            }

            // Rows
            foreach (DbfRecord record in dbf.Records)
            {
                var row = dt.NewRow();
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    row[i] = record.Data[i];
                }
                dt.Rows.Add(row);
            }
            // Clean
            dbf = null;

            //filter the datafrom row in myDTable.AsEnumerable()
            string EMP_UAN  = string.Empty;
            string EMP_NAME = string.Empty;

            //var dt2 = new DataTable();

            //SHOULD  I make a concrete class for this
            var res = from myRow in dt.AsEnumerable()
                      where myRow.Field <string>("WAGE" + monthIndex.ToString()) != null
                      select new Anon
            {
                EMP_UAN  = myRow.Field <string>("EMP_UAN"),
                EMP_NAME = myRow.Field <string>("EMP_NAME"),
                EMP_WAGE = Convert.ToInt32(myRow.Field <string>("WAGE" + monthIndex.ToString()))
            };

            dt = new DataTable();
            dt.Columns.Add("EMP_UAN");
            dt.Columns.Add("EMP_NAME");
            dt.Columns.Add("WAGE" + monthIndex.ToString());
            foreach (var item in res)
            {
                DataRow row = dt.NewRow();

                foreach (var col in dt.Columns)
                {
                    row[columnName : "EMP_UAN"]  = item.EMP_UAN;
                    row[columnName : "EMP_NAME"] = item.EMP_NAME;
                    row[columnName : "WAGE" + monthIndex.ToString()] = item.EMP_WAGE;
                }

                dt.Rows.Add(row);
            }

            return(dt);
        }
        public static DataTable ReadDBFfile(string filePath, int monthIndex)
        {
            var dbf = new Dbf();

            dbf.Read(filePath);
            var dt = new DataTable();


            //return dt;

            // Cols
            for (int i = 0; i < dbf.Fields.Count; i++)
            {
                dt.Columns.Add(dbf.Fields[i].Name, dbf.Fields[i].GetType().GetProperties()[0].PropertyType);
            }

            // Rows
            foreach (DbfRecord record in dbf.Records)
            {
                var row = dt.NewRow();
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    row[i] = record.Data[i];
                }
                dt.Rows.Add(row);
            }
            // Clean
            dbf = null;

            //var dt2 = new DataTable();

            //converting index value to string for some column to get month in spell
            MonthOption month      = (MonthOption)monthIndex;
            string      pf         = "PF" + monthIndex;
            string      monthValue = month.ToString();
            string      eePercent  = monthValue.Substring(0, 3) + "EE";
            string      erPercent  = monthValue.Substring(0, 3) + "ER";
            //SHOULD  I make a concrete class for this
            var res = from myRow in dt.AsEnumerable()
                      where myRow.Field <string>("WAGE" + monthIndex.ToString()) != null
                      select new Anon
            {
                EMP_UAN    = myRow.Field <string>("EMP_UAN"),
                EMP_NAME   = myRow.Field <string>("EMP_NAME"),
                EMP_WAGE   = Convert.ToInt32(myRow.Field <string>("WAGE" + monthIndex.ToString())),
                EMP_WAGE2  = Convert.ToInt32(myRow.Field <string>("WAGE" + monthIndex.ToString())),
                EMP_WAGE3  = Convert.ToInt32(myRow.Field <string>("WAGE" + monthIndex.ToString())),
                EMP_WAGE4  = Convert.ToInt32(myRow.Field <string>("WAGE" + monthIndex.ToString())),
                EE_Percent = Convert.ToInt32(myRow.Field <string>(eePercent)),
                PF         = Convert.ToInt32(myRow.Field <string>(pf)),
                ER_Percent = Convert.ToInt32(myRow.Field <string>(erPercent))
            };

            dt = new DataTable();
            dt.Columns.Add("EMP_UAN");
            dt.Columns.Add("EMP_NAME");
            dt.Columns.Add("WAGE" + monthIndex.ToString());
            dt.Columns.Add("WAGE" + monthIndex.ToString() + 1);
            dt.Columns.Add("WAGE" + monthIndex.ToString() + 2);
            dt.Columns.Add("WAGE" + monthIndex.ToString() + 3);
            dt.Columns.Add("EEPer" + monthIndex.ToString());
            dt.Columns.Add(pf);
            dt.Columns.Add("ERPer" + monthIndex.ToString());
            dt.Columns.Add("NCPDays");
            dt.Columns.Add("Totaldays");

            foreach (var item in res)
            {
                DataRow row = dt.NewRow();

                foreach (var col in dt.Columns)
                {
                    row[columnName : "EMP_UAN"]  = item.EMP_UAN;
                    row[columnName : "EMP_NAME"] = item.EMP_NAME;
                    row[columnName : "WAGE" + monthIndex.ToString()]     = item.EMP_WAGE;
                    row[columnName : "WAGE" + monthIndex.ToString() + 1] = item.EMP_WAGE2;
                    row[columnName : "WAGE" + monthIndex.ToString() + 2] = item.EMP_WAGE3;
                    row[columnName : "WAGE" + monthIndex.ToString() + 3] = item.EMP_WAGE4;
                    row[columnName : "EEPer" + monthIndex.ToString()]    = item.EE_Percent;
                    row[columnName : pf] = item.PF;
                    row[columnName : "ERPer" + monthIndex.ToString()] = item.ER_Percent;
                    row[columnName : "NCPdays"]   = 0;
                    row[columnName : "Totaldays"] = 0;
                }

                dt.Rows.Add(row);
            }

            return(dt);
        }