Analysis.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using CsvHelper;
  8. using CsvHelper.Configuration;
  9. namespace memoQAnalysis
  10. {
  11. public class Analysis
  12. {
  13. public List<MemoQAnalysis> Data { get; }
  14. public Encoding OutputEncoding = Encoding.Unicode;
  15. private const string HeaderComma = ",,X-translated,,,,,,,,101%,,,,,,,,Repetitions,,,,,,,,100%,,,,,,,,95% - 99%,,,,,,,,85% - 94%,,,,,,,,75% - 84%,,,,,,,,50% - 74%,,,,,,,,No match,,,,,,,,Fragments,,,,,,,,Total,,,,,,,,";
  16. private const string HeaderSemicolon =
  17. ";;X-translated;;;;;;;;101%;;;;;;;;Repetitions;;;;;;;;100%;;;;;;;;95% - 99%;;;;;;;;85% - 94%;;;;;;;;75% - 84%;;;;;;;;50% - 74%;;;;;;;;No match;;;;;;;;Fragments;;;;;;;;Total;;;;;;;;";
  18. public string Delimiter;
  19. public string Header
  20. {
  21. get
  22. {
  23. if (Delimiter.Equals(",")) return HeaderComma;
  24. if (Delimiter.Equals(";")) return HeaderSemicolon;
  25. return HeaderComma.Replace(",", Delimiter);
  26. }
  27. }
  28. public Analysis(string path, string delimiter = ",")
  29. {
  30. Delimiter = delimiter;
  31. Data = ReadFromFile(path);
  32. }
  33. public Analysis(byte[] data, string delimiter = ";")
  34. {
  35. Delimiter = delimiter;
  36. Data = ReadData(data);
  37. }
  38. private List<MemoQAnalysis> ReadFromFile(string path)
  39. {
  40. using (var sr = new StreamReader(path))
  41. {
  42. return ReadData(sr);
  43. }
  44. }
  45. private List<MemoQAnalysis> ReadData(StreamReader streamReader)
  46. {
  47. var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
  48. {
  49. Delimiter = Delimiter
  50. };
  51. using (var csv = new CsvReader(streamReader, configuration))
  52. {
  53. var firstLine = streamReader.ReadLine();
  54. if (!string.IsNullOrWhiteSpace(firstLine) && firstLine.StartsWith("file", StringComparison.InvariantCultureIgnoreCase))
  55. {
  56. streamReader.BaseStream.Position = 0;
  57. streamReader.DiscardBufferedData();
  58. }
  59. var result = csv.GetRecords<MemoQAnalysis>().ToList();
  60. return result;
  61. }
  62. }
  63. private List<MemoQAnalysis> ReadData(byte[] data)
  64. {
  65. using (var ms = new MemoryStream(data))
  66. using (var sr = new StreamReader(ms))
  67. {
  68. return ReadData(sr);
  69. }
  70. }
  71. public int WordsToTranslateWithoutRepetitions()
  72. {
  73. var total = 0;
  74. foreach (var file in Data)
  75. {
  76. total += file.NinentyFiveNineWords;
  77. total += file.EightyFiveNinentyFourWords;
  78. total += file.SeventyFiveEightyFourWords;
  79. total += file.FiftySeventyFourWords;
  80. total += file.NoMatchWords;
  81. }
  82. return total;
  83. }
  84. public int WordsToTranslateWithRepetitions()
  85. {
  86. var total = WordsToTranslateWithoutRepetitions();
  87. foreach (var file in Data)
  88. {
  89. total += file.RepetitionsWords;
  90. }
  91. return total;
  92. }
  93. public void Save(string path)
  94. {
  95. var configuration = new CsvConfiguration(CultureInfo.InvariantCulture)
  96. {
  97. Delimiter = Delimiter
  98. };
  99. configuration.RegisterClassMap<MemoQAnalysisMapping>();
  100. using (var sw = new StreamWriter(path, false, OutputEncoding))
  101. using (var csv = new CsvWriter(sw, configuration))
  102. {
  103. csv.WriteRecords(Data);
  104. }
  105. }
  106. }
  107. }