Example #1
0
            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);
            }
Example #2
0
            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);
            }
Example #3
0
            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);
            }