コード例 #1
0
        /// <summary>
        /// For a give DataTable this method output a CSV file with all its content
        /// </summary>
        /// <param name="table"></param>
        private void WriteTable(DataTable table)
        {
            var paradoxTable    = new ParadoxTable(table.TableFolderPath, table.TableName);
            var outputFilePath  = Path.Combine(_outputFolder, table.TableName + ".csv");
            var refreshDateTime = DateTime.UtcNow.ToString("u");

            var builder = new StringBuilder();

            if (_outputHeaderLine)
            {
                var headerLine = string.Join(_columnSeparator, paradoxTable.FieldNames);

                if (_addRefreshDateTimeColumn)
                {
                    headerLine = string.Join(_columnSeparator, headerLine, "DataRefreshDateTime");
                }

                builder.AppendLine(headerLine);
            }

            foreach (ParadoxRecord record in paradoxTable.Enumerate())
            {
                var outputLine = string.Join(_columnSeparator, record.DataValues.Select(Clean));

                if (_addRefreshDateTimeColumn)
                {
                    outputLine = string.Join(_columnSeparator, outputLine, refreshDateTime);
                }

                builder.AppendLine(outputLine);
            }

            File.WriteAllText(outputFilePath, builder.ToString());
        }
コード例 #2
0
        /// <summary>
        /// 获取数据库表连接
        /// </summary>
        /// <param name="tableName"></param>
        /// <returns></returns>
        private ParadoxTable GetParadoxTable(string tableName)
        {
            ParadoxTable table = (ParadoxTable)_ParadoxTableCache[tableName];

            if (table == null)
            {
                table = new ParadoxTable(ConnectionString, tableName);
                _ParadoxTableCache[tableName] = table;
            }

            return(table);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: nydehi/Paradox-Reader
        static void Main(string[] args)
        {
            var dbPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "data");

            Console.WriteLine("Test 1: sequential read first 10 records from start");
            Console.WriteLine("==========================================================");
            var table    = new ParadoxTable(dbPath, "zakazky");
            var recIndex = 1;

            foreach (var rec in table.Enumerate())
            {
                Console.WriteLine("Record #{0}", recIndex++);
                for (int i = 0; i < table.FieldCount; i++)
                {
                    Console.WriteLine("    {0} = {1}", table.FieldNames[i], rec.DataValues[i]);
                }
                if (recIndex > 10)
                {
                    break;
                }
            }
            Console.WriteLine("-- press [enter] to continue --");
            Console.ReadKey();
            Console.Clear();

            Console.WriteLine("Test 2: read 10 records by index (key range: 1750 -> 1760)");
            Console.WriteLine("==========================================================");

            var index     = new ParadoxPrimaryKey(table, Path.Combine(dbPath, "zakazky.PX"));
            var condition =
                new ParadoxCondition.LogicalAnd(
                    new ParadoxCondition.Compare(ParadoxCompareOperator.GreaterOrEqual, 1750, 0, 0),
                    new ParadoxCondition.Compare(ParadoxCompareOperator.LessOrEqual, 1760, 0, 0));
            var qry = index.Enumerate(condition);
            var rdr = new ParadoxDataReader(table, qry);

            recIndex = 1;
            while (rdr.Read())
            {
                Console.WriteLine("Record #{0}", recIndex++);
                for (int i = 0; i < rdr.FieldCount; i++)
                {
                    Console.WriteLine("    {0} = {1}", rdr.GetName(i), rdr[i]);
                }
            }
            Console.WriteLine("-- press [enter] to continue --");
            Console.ReadKey();
        }
コード例 #4
0
        public void WriteCSV(string[] filepaths)
        {
            foreach (string filepath in filepaths)
            {
                string filename  = Path.GetFileName(filepath);
                string tablename = GetTableName(filename);
                var    table     = new ParadoxTable(Directory.GetParent(filepath).ToString(), tablename);
                using (StreamWriter sw = new StreamWriter(Directory.GetParent(filepath).ToString() + "\\" + tablename + ".csv"))
                {
                    string line = "";
                    // Write headers
                    for (int i = 0; i < table.FieldCount; i++)
                    {
                        line += table.FieldNames[i];
                        if (i < table.FieldCount - 1)
                        {
                            line += ",";
                        }
                    }
                    sw.WriteLine(line);

                    // Write data
                    foreach (var rec in table.Enumerate())
                    {
                        line = "";
                        for (int i = 0; i < table.FieldCount; i++)
                        {
                            line += rec.DataValues[i];
                            if (i < table.FieldCount - 1)
                            {
                                line += ",";
                            }
                        }
                        sw.WriteLine(line);
                    }
                }
            }

            DialogResult dialogResult = MessageBox.Show("CSV conversion complete.\n\nView output files?", "Conversion Status", MessageBoxButtons.YesNo);

            if (dialogResult == DialogResult.Yes)
            {
                Process.Start("explorer.exe", Directory.GetParent(filepaths[0]).ToString());
            }
        }
コード例 #5
0
        private void OutputMatchesInput(string inputDirectory, string outputDirectory)
        {
            var dataTables = new DbScanner().GetDatabaseTables(inputDirectory);

            foreach (var table in dataTables)
            {
                var tablePath = Path.Combine(table.TableFolderPath, table.TableName + ".db");
                Assert.True(File.Exists(tablePath));

                var paradoxTable    = new ParadoxTable(table.TableFolderPath, table.TableName);
                var csvTableRecords = File.ReadAllLines(Path.Combine(outputDirectory, table.TableName + ".csv"));

                // very basic check for now
                Assert.Equal(paradoxTable.RecordCount, csvTableRecords.Length);

                foreach (var record in csvTableRecords)
                {
                    var columnCount = record.Split(';').Length;

                    Assert.Equal(paradoxTable.FieldCount, columnCount);
                }
            }
        }