Exemple #1
0
        /// <summary>
        /// Saves the csv file to the specified <see cref="StreamWriter"/>.
        /// </summary>
        /// <param name="streamWriter">The output <see cref="StreamWriter"/>.</param>
        /// <param name="cultureInfo">The output culture.</param>
        /// <param name="unitProvider">The unit provider.</param>
        public void Save(StreamWriter streamWriter, CultureInfo cultureInfo = null, IUnitProvider unitProvider = null)
        {
            if (unitProvider == null)
            {
                unitProvider = UnitProvider.Default;
            }

            if (cultureInfo == null)
            {
                cultureInfo = unitProvider.Culture ?? CultureInfo.InvariantCulture;
            }

            var separator = cultureInfo.TextInfo.ListSeparator;

            for (int i = 0; i < this.Columns.Count; i++)
            {
                if (i > 0)
                {
                    streamWriter.Write(separator);
                }

                streamWriter.Write(this.Columns[i]);
            }

            var displayUnit =
                this.Columns.Select(
                    c =>
            {
                var qt = GetQuantityType(c.Type);
                string symbol;
                return(qt != null ? unitProvider.GetDisplayUnit(qt, out symbol) : null);
            }).ToList();

            streamWriter.WriteLine();

            for (int j = 0; j < this.Rows.Count; j++)
            {
                if (j > 0)
                {
                    streamWriter.WriteLine();
                }

                for (int i = 0; i < this.Columns.Count; i++)
                {
                    if (i > 0)
                    {
                        streamWriter.Write(separator);
                    }

                    var value = this.Rows[j].Values[i];
                    if (Csv.IsUndefined(value))
                    {
                        continue;
                    }

                    var q = value as IQuantity;
                    streamWriter.Write(
                        q != null
                            ? string.Format(cultureInfo, "{0}", q.ConvertTo(displayUnit[i]))
                            : string.Format(cultureInfo, "{0}", value));
                }
            }
        }