예제 #1
0
        private static void Run(Options options)
        {
            options.Print(Console.Out);

            Csv shareInfo = Csv.Load(options.ShareFile, Encoding.GetEncoding("gb2312"), "\t", StringSplitOptions.RemoveEmptyEntries);
            Csv priceInfo = Csv.Load(options.PriceFile, Encoding.GetEncoding("gb2312"), "\t", StringSplitOptions.RemoveEmptyEntries);

            int codeColumnIndexInShareInfo  = Array.IndexOf(shareInfo.Header, "代码");
            int codeColumnIndexInPriceInfo  = Array.IndexOf(priceInfo.Header, "代码");
            int totalShareNumberColumnIndex = Array.IndexOf(shareInfo.Header, "总股数");
            int marketPriceColumnIndex      = Array.IndexOf(priceInfo.Header, "昨收");
            int nameColumnIndex             = Array.IndexOf(priceInfo.Header, "名称");

            Dictionary <string, decimal> shares = new Dictionary <string, decimal>();

            for (int i = 0; i < shareInfo.RowCount; ++i)
            {
                string  code             = GetPureCode(shareInfo[i][codeColumnIndexInShareInfo]);
                decimal totalShareNumber = decimal.Parse(shareInfo[i][totalShareNumberColumnIndex]);

                shares.Add(code, totalShareNumber);
            }

            Dictionary <string, Tuple <string, decimal> > prices = new Dictionary <string, Tuple <string, decimal> >();

            for (int i = 0; i < priceInfo.RowCount; ++i)
            {
                string  code        = GetPureCode(priceInfo[i][codeColumnIndexInShareInfo]);
                decimal marketPrice = decimal.Parse(priceInfo[i][marketPriceColumnIndex]);
                string  name        = priceInfo[i][nameColumnIndex];

                prices.Add(code, Tuple.Create(name, marketPrice));
            }

            // join the keys
            var codes = shares.Keys.Union(prices.Keys).OrderBy(s => s);

            string[] header = new string[]
            {
                "CODE",
                "NAME",
                "TotalShare",
                "MarketPrice"
            };

            Csv marketValues = new Csv(header);

            foreach (var code in codes)
            {
                string[] row = new string[]
                {
                    NormalizeCode(code),
                    prices.ContainsKey(code) ? prices[code].Item1 : "Unknown",
                    shares.ContainsKey(code) ? shares[code].ToString() : "0.0",
                    prices.ContainsKey(code) ? prices[code].Item2.ToString() : "0.0"
                };

                marketValues.AddRow(row);
            }

            Csv.Save(marketValues, options.OutputFile, Encoding.UTF8, ",");

            Console.WriteLine("Done.");
        }
예제 #2
0
        // Implemented from ITest
        public bool Export(Stream stream)
        {
            var targetPoints = parameters.targetPoints;

            targetPoints.Sort();
            targetPoints.Reverse();
            var resultsTable = testResults.resultsTable;

            var csv = new Csv();

            csv.AddRow(new Csv.Row().AddCol(DOCUMENT_HEADER));
            csv.AddRow(new Csv.Row().AddCol("Test Time:").AddCol(testResults.testDuration.ToString()));

            var header = new Csv.Row();

            csv.AddRow(header);
            header.AddCol("Part Number")
            .AddCol("Serial Number")
            .AddCol("Test Date")
            .AddCol("Instrument Model")
            .AddCol("Instrument Serial Number")
            .AddCol("Accuracy")
            .AddCol("Calibration Date")
            .AddCol("Certified By")
            .AddCol("Temperature ºC")
            .AddCol("%RH")
            .AddCol("Error Band");

            foreach (var tp in targetPoints)
            {
                header.AddCol("Calibration Standard")
                .AddCol("Appion Device")
                .AddCol("Units")
                .AddCol("Min (-" + testResults.errorBand.ToString("P1") + ")")
                .AddCol("Max (+" + testResults.errorBand.ToString("P1") + ")");
            }

            header.AddCol("Failures")
            .AddCol("Error(avg)")
            .AddCol("Error(max)");


            foreach (var sn in resultsTable.Keys)
            {
                var results = resultsTable[sn];

                var row = new Csv.Row();
                csv.AddRow(row);

                row.AddCol(sn.deviceModel.GetUnlocalizedPartNumber())
                .AddCol(sn.ToString())
                .AddCol(DateTime.Now.ToShortDateString())
                .AddCol(testResults.instrumentModel)
                .AddCol(testResults.instrumentSerialNumber)
                .AddCol(testResults.instrumentAccuracy.ToString("P1"))
                .AddCol(testResults.instrumentCalibrationDate.ToShortDateString())
                .AddCol(testResults.certifiedBy)
                .AddCol(testResults.temperature.amount.ToString("N1"))
                .AddCol(testResults.humidity.amount.ToString("N1"))
                .AddCol(testResults.errorBand.ToString("P1"));

                double avg = 0, max = 0;
                int    failures = 0;

                foreach (var tp in targetPoints)
                {
                    var eb     = testResults.errorBand;
                    var result = results[tp];
                    if (result == null)
                    {
                        row.AddCol("N/A")
                        .AddCol("N/A")
                        .AddCol("N/A")
                        .AddCol("N/A")
                        .AddCol("N/A");
                    }
                    else
                    {
                        var rmeas = result.result;
                        row.AddCol(tp.measurement.amount.ToString("#"))
                        .AddCol(rmeas.amount.ToString("#"))
                        .AddCol(tp.measurement.unit.ToString())
                        .AddCol((tp.measurement.amount - (tp.measurement.amount * eb)).ToString("#"))
                        .AddCol((tp.measurement.amount + (tp.measurement.amount * eb)).ToString("#"));

                        TestParameters.Grade grade;
                        if (parameters.FindGradeForMeasurement(tp, rmeas, out grade))
                        {
                            if (!grade.passable)
                            {
                                failures++;
                            }
                        }

                        avg += result.error;

                        if (result.error > max)
                        {
                            max = result.error;
                        }
                    }
                }

                row.AddCol(failures.ToString())
                .AddCol((avg / targetPoints.Count).ToString("P1"))
                .AddCol(max.ToString("P1"));
            }

            var ret = csv.Export(stream);

            return(ret);
        }
예제 #3
0
        static void MergeFile(string fullDataFile, string deltaDataFile)
        {
            if (!File.Exists(fullDataFile) || !File.Exists(deltaDataFile))
            {
                Console.WriteLine("file {0} or {1} does not exist", fullDataFile, deltaDataFile);
                return;
            }

            var fullData  = Csv.Load(fullDataFile, Encoding.UTF8, ",");
            var deltaData = Csv.Load(deltaDataFile, Encoding.UTF8, ",");

            var mergedData = new Csv(fullData.Header);

            var orderedFullData = fullData.Rows
                                  .Select(columns => Tuple.Create(DateTime.Parse(columns[1]), columns))
                                  .GroupBy(tuple => tuple.Item1)
                                  .Select(g => g.First())
                                  .OrderBy(tuple => tuple.Item1)
                                  .ToArray();

            var orderedDeltaData = deltaData.Rows
                                   .Select(columns => Tuple.Create(DateTime.Parse(columns[1]), columns))
                                   .GroupBy(tuple => tuple.Item1)
                                   .Select(g => g.First())
                                   .OrderBy(tuple => tuple.Item1)
                                   .ToArray();

            var i = 0;
            var j = 0;

            while (i < orderedFullData.Length || j < orderedDeltaData.Length)
            {
                if (j >= orderedDeltaData.Length)
                {
                    mergedData.AddRow(orderedFullData[i].Item2);
                    ++i;
                }
                else if (i >= orderedFullData.Length)
                {
                    mergedData.AddRow(orderedDeltaData[j].Item2);
                    ++j;
                }
                else
                {
                    var date1 = orderedFullData[i].Item1;
                    var date2 = orderedDeltaData[j].Item1;

                    if (date1 < date2)
                    {
                        mergedData.AddRow(orderedFullData[i].Item2);
                        ++i;
                    }
                    else if (date1 > date2)
                    {
                        mergedData.AddRow(orderedDeltaData[j].Item2);
                        ++j;
                    }
                    else
                    {
                        mergedData.AddRow(orderedDeltaData[j].Item2);
                        ++i;
                        ++j;
                    }
                }
            }

            // save merged file to full data file
            Csv.Save(mergedData, fullDataFile, Encoding.UTF8, ",");

            // remove delta file after merging
            File.Delete(deltaDataFile);
        }
예제 #4
0
        static void MergeFile(string fullDataFile, string deltaDataFile)
        {
            if (!File.Exists(fullDataFile) || !File.Exists(deltaDataFile))
            {
                Console.WriteLine("file {0} or {1} does not exist", fullDataFile, deltaDataFile);
                return;
            }

            Csv fullData  = Csv.Load(fullDataFile, Encoding.UTF8, ",");
            Csv deltaData = Csv.Load(deltaDataFile, Encoding.UTF8, ",");

            Csv mergedData = new Csv(fullData.Header);

            var orderedFullData  = fullData.Rows.OrderBy(columns => DateTime.Parse(columns[1])).ToArray();
            var orderedDeltaData = deltaData.Rows.OrderBy(columns => DateTime.Parse(columns[1])).ToArray();

            int i = 0;
            int j = 0;

            while (i < orderedFullData.Length || j < orderedDeltaData.Length)
            {
                if (j >= orderedDeltaData.Length)
                {
                    mergedData.AddRow(orderedFullData[i]);
                    ++i;
                }
                else if (i >= orderedFullData.Length)
                {
                    mergedData.AddRow(orderedDeltaData[j]);
                    ++j;
                }
                else
                {
                    DateTime date1 = DateTime.Parse(orderedFullData[i][1]);
                    DateTime date2 = DateTime.Parse(orderedDeltaData[j][1]);

                    if (date1 < date2)
                    {
                        mergedData.AddRow(orderedFullData[i]);
                        ++i;
                    }
                    else if (date1 > date2)
                    {
                        mergedData.AddRow(orderedDeltaData[j]);
                        ++j;
                    }
                    else
                    {
                        mergedData.AddRow(orderedDeltaData[j]);
                        ++i;
                        ++j;
                    }
                }
            }

            // save merged file to full data file
            Csv.Save(mergedData, fullDataFile, Encoding.UTF8, ",");

            // remove delta file after merging
            File.Delete(deltaDataFile);
        }