From cd9a43c218870829603af6ac5021ecfdd8bcaedd Mon Sep 17 00:00:00 2001 From: lastvoidtemplar Date: Sat, 10 Jul 2021 11:20:41 +0300 Subject: [PATCH] Merge Writer and Controller, add Xml Writer --- .../BoerseDataConvert.csproj | 1 - .../Controller/RecordController.cs | 59 +++++++++++-------- .../BoerseDataConvert/Model/Record.cs | 27 ++++++++- .../BoerseDataConvert/Model/TagsTable.cs | 4 +- .../BoerseDataConvert/Views/Program.cs | 10 ++-- .../BoerseDataConvert/Views/Reader.cs | 1 - .../BoerseDataConvert/Views/Writer.cs | 44 -------------- 7 files changed, 66 insertions(+), 80 deletions(-) delete mode 100644 BoerseDataConvert/BoerseDataConvert/Views/Writer.cs diff --git a/BoerseDataConvert/BoerseDataConvert/BoerseDataConvert.csproj b/BoerseDataConvert/BoerseDataConvert/BoerseDataConvert.csproj index aa11652..9367c1d 100644 --- a/BoerseDataConvert/BoerseDataConvert/BoerseDataConvert.csproj +++ b/BoerseDataConvert/BoerseDataConvert/BoerseDataConvert.csproj @@ -7,7 +7,6 @@ - diff --git a/BoerseDataConvert/BoerseDataConvert/Controller/RecordController.cs b/BoerseDataConvert/BoerseDataConvert/Controller/RecordController.cs index ded3d0d..82d6ac3 100644 --- a/BoerseDataConvert/BoerseDataConvert/Controller/RecordController.cs +++ b/BoerseDataConvert/BoerseDataConvert/Controller/RecordController.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml; namespace BoerseDataConvert { @@ -12,36 +13,60 @@ namespace BoerseDataConvert private static int count; private static string cur_fileName; private TagsTable tagsTable; - public RecordController(string fileName, string tags) + private static string address; + private static XmlWriter writer; + public RecordController(string adr,string fileName, string tags) { count = 1; - cur_fileName = fileName; + address = adr; + cur_fileName = fileName.Split('.').First(); + Directory.CreateDirectory(address); tagsTable = new TagsTable(tags); + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Indent = true; + XmlWriter writer = XmlWriter.Create($@"{address}/{cur_fileName}.xml", settings); + writer.WriteStartDocument(); + writer.WriteStartElement("table"); + writer.WriteAttributeString("name", null, "file"); } public static void NextFile(string fileName) { + writer.WriteEndElement(); + writer.WriteEndDocument(); + writer.Close(); + cur_fileName = fileName.Split('.').First(); count = 1; cur_fileName = fileName; + writer.WriteStartDocument(); + writer.WriteStartElement("table"); + writer.WriteAttributeString("name", null, "file"); } - public string ConvertToXml(Record record) + public void WriteXmlRecord (Record record) { - StringBuilder xmlRecord = new StringBuilder(); - xmlRecord.Append($" \n"); + writer.WriteStartElement("record"); + writer.WriteAttributeString("id", null, count.ToString()); foreach (var tagValue in record) { try { string tag = CheckTagValue(tagValue.Key, tagValue.Value); - xmlRecord.Append($" <{tag}>{tagValue.Value}\n"); + writer.WriteStartElement(tag); + writer.WriteValue(tagValue.Value); + writer.WriteEndElement(); } catch (ArgumentException e) { Console.WriteLine(e.Message); } } - xmlRecord.Append($" "); + writer.WriteEndElement(); count++; - return xmlRecord.ToString(); + } + public static void EndFile() + { + writer.WriteEndElement(); + writer.WriteEndDocument(); + writer.Close(); } private string CheckTagValue(int tag, string value) { @@ -50,7 +75,7 @@ namespace BoerseDataConvert string tagname = tagsTable.GetTagName(tag); if (value != "NULL" && tagsTable.HaveValueRanges(tag))//Checks if the tag have not a value ranges { - if (tagsTable.IsString(tag) && tagsTable.CheckStringLength(tag,value.Length))//Checks if value type is string + if (tagsTable.IsString(tag) && tagsTable.CheckStringLengthToBig(tag,value.Length))//Checks if value type is string { throw new ArgumentException($"WARN: Too long value \"{tag}\", \"{value}\", max allowed \"{tagsTable.GetTagName(tag)}\", {cur_fileName} line {count + 1}"); } @@ -69,21 +94,7 @@ namespace BoerseDataConvert } else//Checks if the tag have a value ranges { - string[] valueRange = tagLine[2].Split('#').ToArray(); - bool countain = false; - if (value == "") return tagname; - for (int i = 0; i < valueRange.Length; i++) - { - if (valueRange[i] == value)//Checks if the value is in value ranges - { - countain = true; - break; - } - } - if (!countain) - { - throw new ArgumentException($"WARN: Value not in range \"{tag}\", \"{value}\", {cur_fileName} line {count + 1}"); - } + if(!tagsTable.CheckValidValue(tag,value))throw new ArgumentException($"WARN: Value not in range \"{tag}\", \"{value}\", {cur_fileName} line {count + 1}"); } return tagname; } diff --git a/BoerseDataConvert/BoerseDataConvert/Model/Record.cs b/BoerseDataConvert/BoerseDataConvert/Model/Record.cs index 7df267c..99732eb 100644 --- a/BoerseDataConvert/BoerseDataConvert/Model/Record.cs +++ b/BoerseDataConvert/BoerseDataConvert/Model/Record.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,8 +7,30 @@ using System.Threading.Tasks; namespace BoerseDataConvert { - public class Record + + public class Record : IEnumerable { - public List>TagsValues; + private List> TagsValues; + + public Record() + { + TagsValues = new List>(); + } + public void Add(int tag, string value) + { + TagsValues.Add(new KeyValuePair(tag, value)); + } + public IEnumerator> GetEnumerator() + { + foreach (var item in TagsValues) + { + yield return item; + } + } + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } } } + diff --git a/BoerseDataConvert/BoerseDataConvert/Model/TagsTable.cs b/BoerseDataConvert/BoerseDataConvert/Model/TagsTable.cs index 2c422e7..6e8c045 100644 --- a/BoerseDataConvert/BoerseDataConvert/Model/TagsTable.cs +++ b/BoerseDataConvert/BoerseDataConvert/Model/TagsTable.cs @@ -44,11 +44,11 @@ namespace BoerseDataConvert { return table[tag].HaveValueRanges; } - public int GetMaxValueLengthToBig(int tag) + public int GetMaxValueLength(int tag) { return table[tag].StringLength; } - public bool CheckStringLength(int tag, int value) + public bool CheckStringLengthToBig(int tag, int value) { return table[tag].StringLength x.Split('\\', '/').Last()).ToArray(); Reader reader = new Reader(inputDir, fileNames); - Writer writer = new Writer(outputDir, fileNames[0]); - RecordController a = new RecordController(fileNames[0], tags); + RecordController a = new RecordController(outputDir,fileNames[0], tags); while (true) { try { Record record = reader.ReadLineRecord(); - string s = a.ConvertToXml(record); - writer.WriteRecord(s); + a.WriteXmlRecord(record); } catch (IndexOutOfRangeException) { Reader.EndFile(); - Writer.EndFile(); + RecordController.EndFile(); break; } } diff --git a/BoerseDataConvert/BoerseDataConvert/Views/Reader.cs b/BoerseDataConvert/BoerseDataConvert/Views/Reader.cs index 30da708..7803029 100644 --- a/BoerseDataConvert/BoerseDataConvert/Views/Reader.cs +++ b/BoerseDataConvert/BoerseDataConvert/Views/Reader.cs @@ -31,7 +31,6 @@ namespace BoerseDataConvert EndFile(); reader = new StreamReader($@"{adr}/{filesNames[fileInd]}", CodePagesEncodingProvider.Instance.GetEncoding(1252)); RecordController.NextFile(filesNames[fileInd]); - Writer.NextFile(filesNames[fileInd]); s = reader.ReadLine(); s = reader.ReadLine(); } diff --git a/BoerseDataConvert/BoerseDataConvert/Views/Writer.cs b/BoerseDataConvert/BoerseDataConvert/Views/Writer.cs deleted file mode 100644 index 4f49afd..0000000 --- a/BoerseDataConvert/BoerseDataConvert/Views/Writer.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace BoerseDataConvert -{ - public class Writer - { - private static string curFilesName; - private static StreamWriter writer; - private static string address; - - public Writer(string _address, string filesName) - { - address = _address; - curFilesName = filesName; - Directory.CreateDirectory(address); - string[] file = curFilesName.Split('.').ToArray(); - writer = new StreamWriter($@"{address}/{file[0]}.xml"); - writer.WriteLine($""); - - } - public void WriteRecord(string record) - { - writer.WriteLine(record); - } - public static void NextFile(string fileName) - { - EndFile(); - curFilesName = fileName; - string[] file = curFilesName.Split('.').ToArray(); - writer = new StreamWriter($@"{address}/{file[0]}.xml"); - writer.WriteLine($"
"); - } - public static void EndFile() - { - writer.WriteLine("
"); - writer.Close(); - } - } -}