public DFTable[] Deserialize() { DFTable[] _data; try { XmlReader reader = XmlReader.Create(_fileName); _data = (DFTable[])base.Deserialize(reader); reader.Close(); } //catch (System.Exception ex) catch { _data = new DFTable[0]; } return(_data); }
public bool Import(DFTable table, string fileName) { int lineNum = 0, columnNum, idx; string textLine; string[] tokens; Encoding ascii = Encoding.ASCII; StreamReader reader = new StreamReader(fileName); MemoryStream list = new MemoryStream(); _recordCount = 0; _recordSize = 0; // Datensatzgröße berechnen for (idx = 0; idx < table.Fields.Length; idx++) { _recordSize += table.Fields[idx].Length; } // Zeilenweise die Textdatei abarbeiten while ((textLine = reader.ReadLine()) != null) { // Zähler der Gesamtzeilen erhöhen. lineNum++; // Kommentar- und Leerzeilen übergehen if (textLine.Length == 0 || textLine[0] == ';') { continue; } // Zeilendaten zerlegen tokens = textLine.Split('\t'); // Anzahl Felder muss mit Definition übereinstimmen if (tokens.Length != table.Fields.Length) { reader.Close(); throw new ListImportException(fileName, lineNum, 0, "Falsche Feldanzahl.");; } byte[] buf; for (columnNum = 0; columnNum < tokens.Length; columnNum++) { // Spaltenbreite muss mit Definition übereinstimmen if (tokens[columnNum].Length >= table.Fields[columnNum].Length) { reader.Close(); throw new ListImportException(fileName, lineNum, columnNum + 1, "Feldbreite überschritten.");; } buf = ascii.GetBytes(tokens[columnNum]); for (idx = 0; idx < buf.Length; idx++) { // Feldinhalt prüfen if (table.Fields[columnNum].Type == 3 && char.IsDigit(Convert.ToChar(buf[idx])) == false) { reader.Close(); throw new ListImportException(fileName, lineNum, columnNum + 1, "Feldwert fehlerhaft (Formatfehler).");; } list.WriteByte(buf[idx]); } for (; idx < table.Fields[columnNum].Length; idx++) { list.WriteByte(0); } } _recordCount++; } if (list.Length > 0) { _mem = list.GetBuffer(); } else { _recordCount = 0; _recordSize = 0; _mem = null; } reader.Close(); return(true); }
public bool LoadFromDevice(int channelID, int deviceID, string filePath) { int idx, count; _channelID = channelID; _deviceID = deviceID; _filePath = filePath; _baseIndex = 0; _tables = null; ErrorID = 0; if (_type == TableType.Record) { // Laden der Listenbeschreibungen if (DFComDLL.DFCLoadDatensatzbeschreibung(_channelID, _deviceID, out _errorID) == 0) { return(false); } count = DFComDLL.DFCDatBCnt(_channelID); if (count == 0) { return(true); } } else if (_type == TableType.List) { // Listenbeschreibungen des Setups müssen geladen werden, sind nicht ZK2-Listen // Laden der Listenbeschreibungen if (DFComDLL.DFCLoadListenbeschreibung(_channelID, _deviceID, out _errorID) == 0) { return(false); } count = DFComDLL.DFCListBCnt(_channelID); if (count == 0) { return(true); } } else if (_type == TableType.ListZK2) { count = 7; // Basisindex setzen _baseIndex = 200; } else { // Listentype liegt außerhalb des unterstützten Bereichs. throw new Exception("Tabellentyp liegt außerhalb des unterstützten Bereiches."); } // Listenbeschreibungen aus DLL importieren _tables = new DFTable[count]; for (idx = 0; idx < Tables.Length; idx++) { Tables[idx] = new DFTable(); } int idxTable, idxField, fieldCount = 0, type = 0, var; StringBuilder name = new StringBuilder(20); int length = 0; for (idxTable = 0; idxTable < count; idxTable++) { // Listendefinition lesen if (((_type == TableType.List || _type == TableType.ListZK2) && DFComDLL.DFCListBDatensatz(_channelID, _baseIndex + idxTable, name, out fieldCount, out var) == 0) || (_type == TableType.Record && DFComDLL.DFCDatBDatensatz(_channelID, _baseIndex + idxTable, name, out fieldCount) == 0)) { throw new Exception("Funktion zur Verarbeitung der Tabellenbeschreibungen (DFCListBDatensatz, DFCDatBDatensatz) schlug fehl."); } Tables[idxTable].Name = name.ToString(); Tables[idxTable].Fields = new DFTableField[fieldCount]; for (idx = 0; idx < Tables[idxTable].Fields.Length; idx++) { Tables[idxTable].Fields[idx] = new DFTableField(); } for (idxField = 0; idxField < fieldCount; idxField++) { if (((_type == TableType.List || _type == TableType.ListZK2) && DFComDLL.DFCListBFeld(_channelID, _baseIndex + idxTable, idxField, name, out type, out length) == 0) || (_type == TableType.Record && DFComDLL.DFCDatBFeld(_channelID, _baseIndex + idxTable, idxField, name, out type, out length) == 0)) { throw new Exception("Funktion zur Verarbeitung der Tabellenbeschreibungen (DFCListBFeld, DFCDatBFeld) schlug fehl."); } Tables[idxTable].Fields[idxField].Name = name.ToString(); Tables[idxTable].Fields[idxField].Type = type; Tables[idxTable].Fields[idxField].Length = length; } } return(true); }