using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using CsvHelper; using CsvHelper.Configuration; namespace memoQAnalysis { public class Analysis { public List Data { get; } private readonly string _delimiter; public Analysis(string path, string delimiter = ",") { _delimiter = delimiter; Data = ReadFromFile(path); } public Analysis(byte[] data, string delimiter = ";") { _delimiter = delimiter; Data = ReadData(data); } private List ReadFromFile(string path) { using (var sr = new StreamReader(path)) { return ReadData(sr); } } private List ReadData(StreamReader streamReader) { var configuration = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = _delimiter }; using (var csv = new CsvReader(streamReader, configuration)) { var firstLine = streamReader.ReadLine(); if (!string.IsNullOrWhiteSpace(firstLine) && firstLine.StartsWith("file", StringComparison.InvariantCultureIgnoreCase)) { streamReader.BaseStream.Position = 0; streamReader.DiscardBufferedData(); } var result = csv.GetRecords().ToList(); return result; } } private List ReadData(byte[] data) { using (var ms = new MemoryStream(data)) using (var sr = new StreamReader(ms)) { return ReadData(sr); } } public int WordsToTranslateWithoutRepetitions() { var total = 0; foreach (var file in Data) { total += file.NinentyFiveNineWords; total += file.EightyFiveNinentyFourWords; total += file.SeventyFiveEightyFourWords; total += file.FiftySeventyFourWords; total += file.NoMatchWords; } return total; } public int WordsToTranslateWithRepetitions() { var total = WordsToTranslateWithoutRepetitions(); foreach (var file in Data) { total += file.RepetitionsWords; } return total; } } }