예제 #1
0
 private static void TrimValues(CsvFileLine csvFileLine)
 {
     for (var i = 0; i < csvFileLine.Values.Length; i++)
     {
         csvFileLine.Values[i] = csvFileLine.Values[i].Trim();
     }
 }
예제 #2
0
            public void WhenOneValue_ThenSetValuesAndLine()
            {
                var sut = new CsvFileLine(new [] { "John" });

                Assert.That(sut.Values.Single(), Is.EqualTo("John"));
                Assert.That(sut.Line, Is.EqualTo("John"));
            }
예제 #3
0
        private static IList <CsvFileLine> ReadCsvFile(string file, CsvFileReaderOptions options)
        {
            var fileLines = new List <CsvFileLine>();

            using (var reader = new StreamReader(File.OpenRead(file)))
            {
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();

                    if (line == null)
                    {
                        continue;
                    }

                    var csvFileLine = new CsvFileLine(line);

                    if (options.EnableTrimValues)
                    {
                        TrimValues(csvFileLine);
                    }

                    fileLines.Add(csvFileLine);
                }
            }

            return(fileLines);
        }
예제 #4
0
        /// <summary>
        /// Write a body to a file.
        /// </summary>
        /// <param name="file">Path to CSV file.</param>
        /// <param name="body">CSV file body to write.</param>
        /// <param name="existingHasHeader">True the existing CSV file has a header; otherwise does not have a header.</param>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="body" /> is null.</exception>
        public void WriteBody(string file, CsvFileBody body, bool existingHasHeader = true)
        {
            if (body == null)
            {
                throw new ArgumentNullException(nameof(body));
            }

            if (!body.HasLines)
            {
                return;
            }

            CsvFileLine header = null;

            if (existingHasHeader)
            {
                header = ReadHeader(file);
            }

            using (var writer = new StreamWriter(file))
            {
                if (header != null)
                {
                    writer.WriteLine(header);
                }

                foreach (var line in body.Lines)
                {
                    writer.WriteLine(line.Line);
                }
            }
        }
예제 #5
0
            public void WhenIsNotEmpty_ThenReturnFalse()
            {
                var sut = new CsvFileLine(Line);

                var result = sut.IsEmpty;

                Assert.That(result, Is.False);
            }
예제 #6
0
            public void WhenIsEmpty_ThenReturnTrue()
            {
                var sut = new CsvFileLine(string.Empty);

                var result = sut.IsEmpty;

                Assert.That(result, Is.True);
            }
예제 #7
0
            public void WhenEmpty_ThenReturnZero()
            {
                var sut = new CsvFileLine(string.Empty);

                var result = sut.ValuesCount;

                Assert.That(result, Is.EqualTo(0));
            }
예제 #8
0
            public void WhenLinesAreNotEqual_ThenReturnFalse()
            {
                var line = new CsvFileLine(Line + ",Blah");

                var result = Act(line);

                Assert.That(result, Is.False);
            }
예제 #9
0
            public void WhenValidValues_ThenSetLine()
            {
                var sut = new CsvFileLine(Values);

                var result = sut.Line;

                Assert.That(result, Is.EqualTo(Line));
            }
예제 #10
0
            public void WhenValuesIsEmpty_ThenLineReturnsEmpty()
            {
                var sut = new CsvFileLine(string.Empty);

                var result = sut.Line;

                Assert.That(result, Is.Empty);
            }
예제 #11
0
            public void WhenLinesAreEqual_ThenReturnTrue()
            {
                var line = new CsvFileLine(Line);

                var result = Act(line);

                Assert.That(result, Is.True);
            }
예제 #12
0
            public void WhenValueIsEscapedWithDoubleQuotes_ThenTreatAsSingleValue()
            {
                var sut = new CsvFileLine(new [] { "list, of, items", "222" });

                Assert.That(sut.Values.First(), Is.EqualTo("list, of, items"));
                Assert.That(sut.Values.Second(), Is.EqualTo("222"));

                Assert.That(sut.Line, Is.EqualTo("\"list, of, items\",222"));
            }
예제 #13
0
            public void WhenValuesContainCommas_ThenTreatCommasAsEscaped()
            {
                var sut = new CsvFileLine(new[] { ",", ",,", ",,," });

                Assert.That(sut.Values.First(), Is.EqualTo(","));
                Assert.That(sut.Values.Second(), Is.EqualTo(",,"));
                Assert.That(sut.Values.Third(), Is.EqualTo(",,,"));

                Assert.That(sut.Line, Is.EqualTo("\",\",\",,\",\",,,\""));
            }
예제 #14
0
            public void WhenValidValues_ThenSetValues()
            {
                var sut = new CsvFileLine(Values);

                var result = sut.Values;

                Assert.That(result.First(), Is.EqualTo(Values.First()));
                Assert.That(result.Second(), Is.EqualTo(Values.Second()));
                Assert.That(result.Third(), Is.EqualTo(Values.Third()));
            }
예제 #15
0
            public void WhenValuesIsEmpty_ThenValuesReturnsEmpty()
            {
                string[] values = new string[0];

                var sut = new CsvFileLine(values);

                var result = sut.Values;

                Assert.That(result.Length, Is.EqualTo(0));
            }
예제 #16
0
            public void WhenValueHasOpenEscapedQuoteOnly_ThenTreatNotAsSingleValue()
            {
                var sut = new CsvFileLine("\"list,of,items");

                Assert.That(sut.Values.First(), Is.EqualTo("\"list"));
                Assert.That(sut.Values.Second(), Is.EqualTo("of"));
                Assert.That(sut.Values.Third(), Is.EqualTo("items"));


                Assert.That(sut.Line, Is.EqualTo("\"list,of,items"));
            }
예제 #17
0
        /// <summary>
        /// Write a line to a CSV file.
        /// </summary>
        /// <param name="file">Path to CSV file.</param>
        /// <param name="line">CSV line to write.</param>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="line" /> is null.</exception>
        public void AppendLine(string file, CsvFileLine line)
        {
            if (line == null)
            {
                throw new ArgumentNullException(nameof(line));
            }

            using (var writer = new StreamWriter(file, true))
            {
                writer.WriteLine(line);
            }
        }
예제 #18
0
        /// <summary>
        /// Writes a header to a file.
        /// </summary>
        /// <param name="file">Path to CSV file.</param>
        /// <param name="header">CSV file header to write.</param>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="header" /> is null.</exception>
        public void WriteHeader(string file, CsvFileLine header)
        {
            if (header == null)
            {
                throw new ArgumentNullException(nameof(header));
            }

            var body = ReadBody(file);

            using (var writer = new StreamWriter(file))
            {
                writer.WriteLine(header);

                foreach (var line in body)
                {
                    writer.WriteLine(line.Line);
                }
            }
        }
예제 #19
0
 private void Act(CsvFileLine line)
 {
     _sut.AppendLine(_file, line);
 }
예제 #20
0
 private void Act(CsvFileLine header)
 {
     _sut.WriteHeader(_file, header);
 }
예제 #21
0
        static void Main(string[] args)
        {
            Console.WriteLine("Converting CSV to JSON");

            CsvFileLine FileData = null;

            using (var reader = new StreamReader(@"data\input.csv"))
            {
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();

                    var splitValues = line?.Split(',');

                    for (var i = 0; i < splitValues?.Length; i++)
                    {
                        splitValues[i] = splitValues[i].Replace("\"", string.Empty);
                    }

                    if (splitValues == null || splitValues.Length < 1)
                    {
                        Console.WriteLine("Empty line discovered.  Aborting.");
                        return;
                    }

                    switch (splitValues[Constants.RecordTypeOrdinal])
                    {
                    case Constants.FLine:
                    {
                        FileData = new CsvFileLine(splitValues[Constants.DateOrdinal], splitValues[Constants.FileTypeOrdinal]);
                        break;
                    }

                    case Constants.OLine:
                    {
                        FileData?.AddOrder(splitValues[Constants.DateOrdinal], splitValues[Constants.OrderCodeOrdinal], splitValues[Constants.OrderNumberOrdinal]);
                        break;
                    }

                    case Constants.BLine:
                    {
                        FileData?.MostRecentOrder?.SetBuyer(splitValues[Constants.BuyerNameOrdinal], splitValues[Constants.BuyerStreetOrdinal], splitValues[Constants.BuyerZipOrdinal]);
                        break;
                    }

                    case Constants.TLine:
                    {
                        FileData?.MostRecentOrder?.SetTimings(splitValues[Constants.TimingsStartOrdinal], splitValues[Constants.TimingsStopOrdinal], splitValues[Constants.TimingsGapOrdinal], splitValues[Constants.TimingsOffsetOrdinal], splitValues[Constants.TimingsPauseOrdinal]);
                        break;
                    }

                    case Constants.LLine:
                    {
                        FileData?.MostRecentOrder?.AddItemLine(splitValues[Constants.LineItemSkuOrdinal], splitValues[Constants.LineItemQuantityOrdinal]);
                        break;
                    }

                    case Constants.ELine:
                    {
                        FileData?.AddEnder(splitValues[Constants.EnderProcessOrdinal], splitValues[Constants.EnderPaidOrdinal], splitValues[Constants.EnderCreatedOrdinal]);
                        break;
                    }

                    default:
                        break;
                    }
                }

                // Ensure that the output directory exists.
                if (!Directory.Exists("output"))
                {
                    Directory.CreateDirectory("output");
                }

                var contractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                };

                File.WriteAllText(@"output\results.json", JsonConvert.SerializeObject(FileData, new JsonSerializerSettings
                {
                    ContractResolver = contractResolver,
                    Formatting       = Formatting.Indented
                }));
            }
        }
예제 #22
0
 public void WhenValuesIsNull_ThenThrowException()
 {
     Assert.Throws <ArgumentNullException>(() => { var l = new CsvFileLine(null as string[]); });
 }
예제 #23
0
 public void SetUp()
 {
     _sut = new CsvFileLine(Line);
 }
예제 #24
0
 private bool Act(CsvFileLine line)
 {
     return(_sut.Equals(line));
 }
예제 #25
0
 private bool Act(CsvFileLine line)
 {
     return(_sut.Contains(line));
 }