Пример #1
0
        private void LoadFile(string fileName)
        {
            CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                if (!File.Exists(fileName))
                {
                    return;
                }

                var name = Path.GetFileNameWithoutExtension(fileName);

                var pairs = new List <Tuple <SecurityId, object> >();

                using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    var reader = new FastCsvReader(stream, Encoding.UTF8);

                    reader.NextLine();
                    reader.Skip(2);

                    var type1 = reader.ReadString().To <Type>();
                    var type2 = reader.ReadString().To <Type>();

                    var isTuple = type2 != null;

                    while (reader.NextLine())
                    {
                        var securityId = new SecurityId
                        {
                            SecurityCode = reader.ReadString(),
                            BoardCode    = reader.ReadString()
                        };

                        var nativeId = reader.ReadString().To(type1);

                        if (isTuple)
                        {
                            var nativeId2 = reader.ReadString().To(type2);
                            nativeId      = typeof(Tuple <,>).MakeGenericType(type1, type2).CreateInstance(new[] { nativeId, nativeId2 });
                        }

                        pairs.Add(Tuple.Create(securityId, nativeId));
                    }
                }

                lock (_sync)
                {
                    var nativeIds = _nativeIds.SafeAdd(name);

                    foreach (var tuple in pairs)
                    {
                        nativeIds.Add(tuple.Item1, tuple.Item2);
                    }
                }
            });
        }
Пример #2
0
            public void Init()
            {
                if (!File.Exists(_fileName))
                {
                    return;
                }

                CultureInfo.InvariantCulture.DoInCulture(() =>
                {
                    using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
                    {
                        var reader = new FastCsvReader(stream, Encoding.UTF8);

                        reader.NextLine();
                        reader.Skip();

                        var fields = new string[reader.ColumnCount - 1];

                        for (var i = 0; i < reader.ColumnCount - 1; i++)
                        {
                            fields[i] = reader.ReadString();
                        }

                        reader.NextLine();
                        reader.Skip();

                        var types = new Type[reader.ColumnCount - 1];

                        for (var i = 0; i < reader.ColumnCount - 1; i++)
                        {
                            types[i] = reader.ReadString().To <Type>();
                            _fieldTypes.Add(fields[i], types[i]);
                        }

                        var idGenerator = new SecurityIdGenerator();

                        while (reader.NextLine())
                        {
                            var secId = idGenerator.Split(reader.ReadString());

                            var values = new Dictionary <object, object>();

                            for (var i = 0; i < fields.Length; i++)
                            {
                                values[fields[i]] = reader.ReadString().To(types[i]);
                            }

                            _cache.Add(secId, values);
                        }
                    }
                });
            }
Пример #3
0
            public override void Read(Stream stream)
            {
                CultureInfo.InvariantCulture.DoInCulture(() =>
                {
                    var count         = 0;
                    var firstTimeRead = false;

                    var reader = new FastCsvReader(stream, _encoding);

                    while (reader.NextLine())
                    {
                        var message = _serializer.Read(reader, this);

                        var openTime = message.OpenTime.UtcDateTime;

                        _items.Add(openTime, message);

                        if (!firstTimeRead)
                        {
                            FirstTime     = openTime;
                            firstTimeRead = true;
                        }

                        LastTime = openTime;

                        count++;
                    }

                    Count = count;

                    stream.Position = 0;
                });
            }
            public override bool MoveNext()
            {
                var retVal = _reader.NextLine();

                if (retVal)
                {
                    Current = _serializer.Read(_reader, _metaInfo.Date);
                }

                return(retVal);
            }
Пример #5
0
        internal void ReadItems(List <Exception> errors)
        {
            if (errors == null)
            {
                throw new ArgumentNullException(nameof(errors));
            }

            if (!File.Exists(_fileName))
            {
                return;
            }

            CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                using (var stream = new FileStream(_fileName, FileMode.OpenOrCreate))
                {
                    var reader = new FastCsvReader(stream, Registry.Encoding);

                    while (reader.NextLine())
                    {
                        try
                        {
                            var item = Read(reader);
                            var key  = GetNormalizedKey(item);

                            lock (SyncRoot)
                            {
                                InnerCollection.Add(item);
                                AddCache(item);
                                _items.Add(key, item);
                            }
                        }
                        catch (Exception ex)
                        {
                            if (errors.Count < 10)
                            {
                                errors.Add(ex);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
            });

            InnerCollection.ForEach(OnAdded);
        }
Пример #6
0
            private void ReadItems()
            {
                CultureInfo.InvariantCulture.DoInCulture(() =>
                {
                    using (var stream = new FileStream(_fileName, FileMode.OpenOrCreate))
                    {
                        var reader = new FastCsvReader(stream, _encoding);

                        while (reader.NextLine())
                        {
                            var item = Read(reader);
                            var key  = GetKey(item);

                            _items.Add(key, item);
                            Add(item);
                        }
                    }
                });
            }
        public override void Read(Stream stream)
        {
            CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                var count = 0;

                var firstTimeRead = false;
                string lastLine   = null;

                var reader = new FastCsvReader(stream, _encoding);

                while (reader.NextLine())
                {
                    lastLine = reader.CurrentLine;

                    if (!firstTimeRead)
                    {
                        FirstTime     = reader.ReadTime(Date).UtcDateTime;
                        firstTimeRead = true;
                    }

                    count++;
                }

                Count = count;

                if (lastLine != null)
                {
                    reader = new FastCsvReader(lastLine);

                    if (!reader.NextLine())
                    {
                        throw new InvalidOperationException();
                    }

                    LastTime = reader.ReadTime(Date).UtcDateTime;
                    _lastId  = _readId?.Invoke(reader);
                }

                stream.Position = 0;
            });
        }
Пример #8
0
        internal void ReadItems(List <Exception> errors)
        {
            if (!File.Exists(_fileName))
            {
                return;
            }

            CultureInfo.InvariantCulture.DoInCulture(() =>
            {
                using (var stream = new FileStream(_fileName, FileMode.OpenOrCreate))
                {
                    var reader = new FastCsvReader(stream, Registry.Encoding);

                    while (reader.NextLine())
                    {
                        try
                        {
                            var item = Read(reader);
                            var key  = GetKey(item);

                            _items.Add(key, item);
                            Add(item);
                        }
                        catch (Exception ex)
                        {
                            if (errors.Count < 10)
                            {
                                errors.Add(ex);
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
            });
        }
Пример #9
0
            public void Init()
            {
                if (File.Exists(_fileName))
                {
                    CultureInfo.InvariantCulture.DoInCulture(() =>
                    {
                        using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
                        {
                            var reader = new FastCsvReader(stream, Encoding.UTF8);

                            reader.NextLine();
                            reader.Skip();

                            var fields = new string[reader.ColumnCount - 1];

                            for (var i = 0; i < fields.Length; i++)
                            {
                                fields[i] = reader.ReadString();
                            }

                            reader.NextLine();
                            reader.Skip();

                            var types = new Type[reader.ColumnCount - 1];

                            for (var i = 0; i < types.Length; i++)
                            {
                                types[i] = reader.ReadString().To <Type>();
                                //_fieldTypes.Add(fields[i], types[i]);
                            }

                            if (_fields == null)
                            {
                                if (fields.Length != types.Length)
                                {
                                    throw new InvalidOperationException($"{fields.Length} != {types.Length}");
                                }

                                _fields = fields.Select((f, i) => Tuple.Create(f, types[i])).ToArray();
                            }

                            while (reader.NextLine())
                            {
                                var secId = reader.ReadString().ToSecurityId();

                                var values = new Dictionary <string, object>();

                                for (var i = 0; i < fields.Length; i++)
                                {
                                    values[fields[i]] = reader.ReadString().To(types[i]);
                                }

                                _cache.Add(secId, values);
                            }
                        }
                    });
                }
                else
                {
                    if (_fields == null)
                    {
                        throw new InvalidOperationException();
                    }

                    Write(Enumerable.Empty <Tuple <SecurityId, IDictionary <string, object> > >());
                }
            }