private void button_read_Click(object sender, EventArgs e)
        {
            bool fillWithZero = checkBox1.Checked;
            var  directory    = this.directorySelectionControl1.Path;

            Geo.Utils.FileUtil.CheckOrCreateDirectory(directory);

            var prns = SatelliteNumber.ParsePRNsBySplliter(textBox_satPrns.Text, new char[] { ',' });
            Dictionary <SatelliteNumber, StreamWriter> prnWritersOfBroadcast      = new Dictionary <SatelliteNumber, StreamWriter>();
            Dictionary <SatelliteNumber, StreamWriter> prnWritersOfBroadcastError = new Dictionary <SatelliteNumber, StreamWriter>();

            FileEphemerisService coll;
            FileEphemerisService coll0;
            ClockService         collOfPrecise;

            string[] pathes          = this.textBox_Broadcast.Lines;
            string[] pathesOfPrecise = this.textBox_Pathes.Lines;
            string   firstDayOfWeek  = GetDayOfWeekFromBroadcastFileName(pathes[0]);
            string   lastDayOfWeek   = GetDayOfWeekFromBroadcastFileName(pathes[pathes.Length - 1]);
            string   filename        = Path.GetFileNameWithoutExtension(pathesOfPrecise[0]).Substring(0, 3) + GetFileEphemerisTypeFromPath(pathesOfPrecise[0]).ToString();;

            foreach (var item in prns)
            {
                var pathOfBroadcast      = Path.Combine(directory, item.ToString() + "Broadcast" + "-" + firstDayOfWeek + "-" + lastDayOfWeek + ".txt");
                var pathOfBroadcastError = Path.Combine(directory, item.ToString() + "BroadcastError" + "-" + filename + firstDayOfWeek + "-" + lastDayOfWeek + ".txt");
                prnWritersOfBroadcast[item]      = new StreamWriter(new FileStream(pathOfBroadcast, FileMode.Create));
                prnWritersOfBroadcastError[item] = new StreamWriter(new FileStream(pathOfBroadcastError, FileMode.Create));
            }

            List <string> listPath = new List <string> ();

            for (int i = 0; i < pathesOfPrecise.Length; i++)
            {
                listPath.Add(pathesOfPrecise[i]);
            }

            #region
            coll0 = EphemerisDataSourceFactory.Create(pathes[0]);
            foreach (var pathItem in pathes)
            {
                coll = EphemerisDataSourceFactory.Create(pathItem);
                string dayOfWeek = GetDayOfWeekFromBroadcastFileName(pathItem);
                for (int index = 0; index < listPath.Count; index++)
                {
                    if (listPath[index].Contains(dayOfWeek))
                    {
                        collOfPrecise = new ClockService(listPath[index]);
                        Time end = collOfPrecise.TimePeriod.End;
                        foreach (var prn in prns)
                        {
                            var writerOfBroadcast      = prnWritersOfBroadcast[prn];
                            var writerOfBroadcastError = prnWritersOfBroadcastError[prn];
                            var allOfBroadcast         = coll.Gets(prn, coll.TimePeriod.Start, end);
                            var allOfBroadcast0        = coll0.Gets(prn, coll0.TimePeriod.Start, coll0.TimePeriod.End);
                            var allOfPrecise           = collOfPrecise.GetClocks(prn);
                            if (allOfBroadcast == null)// || allOfPrecise == null || allOfPrecise.Count==0)
                            {
                                continue;
                            }
                            allOfBroadcast.Sort();
                            allOfBroadcast0.Sort();
                            if (prn.SatelliteType == SatelliteType.E)
                            {
                            }
                            int  interval = 0;
                            Time start0   = collOfPrecise.TimePeriod.Start;
                            switch (prn.SatelliteType)
                            {
                            case SatelliteType.E: interval = 600; break;

                            case SatelliteType.C: interval = 3600; break;

                            case SatelliteType.G: interval = 7200; break;

                            case SatelliteType.R: interval = 1800; start0 = collOfPrecise.TimePeriod.Start + 900; break;

                            case SatelliteType.J: interval = 896; break;

                            default: break;
                            }
                            for (Time i = start0; i <= end; i += interval)
                            {
                                var findOfPrecise   = allOfPrecise.SingleOrDefault(m => m.Time == i);
                                var findOfBroadcast = allOfBroadcast.SingleOrDefault(m => m.Time == i);
                                if (findOfBroadcast == null)
                                {
                                    findOfBroadcast = allOfBroadcast0.SingleOrDefault(m => m.Time == i);
                                }
                                if (findOfPrecise == null || findOfBroadcast == null)
                                {
                                    findOfPrecise = new AtomicClock()
                                    {
                                        Time = i, Prn = prn, ClockBias = 9999999999.0
                                    };

                                    if (findOfBroadcast == null)
                                    {
                                        findOfBroadcast = new Ephemeris()
                                        {
                                            Time = i, Prn = prn, ClockBias = 9999999999.0
                                        }
                                    }
                                    ;
                                }
                                else
                                {
                                    findOfPrecise.ClockBias = findOfPrecise.ClockBias - findOfBroadcast.ClockBias;
                                }

                                if (findOfBroadcast.ClockBias == 9999999999.0 && prn.SatelliteType == SatelliteType.G)
                                {
                                    findOfBroadcast = allOfBroadcast.FirstOrDefault(m => Math.Abs((m.Time - i) * 1.0) < 60);
                                    if (findOfBroadcast == null)
                                    {
                                        findOfBroadcast = allOfBroadcast0.FirstOrDefault(m => Math.Abs((m.Time - i) * 1.0) < 60);
                                    }
                                    if (findOfBroadcast == null)
                                    {
                                        findOfBroadcast = new Ephemeris()
                                        {
                                            Time = i, Prn = prn, ClockBias = 9999999999.0
                                        }
                                    }
                                    ;
                                }
                                writerOfBroadcast.WriteLine(findOfBroadcast.GetSimpleTabValues());
                                writerOfBroadcastError.WriteLine(findOfPrecise.GetTabValues());
                            }


                            //for (Time i = collOfPrecise.TimePeriod.Start; i <= end1; i = i + intervalSec)
                            //{
                            //    var findOfBroadcast = allOfBroadcast.SingleOrDefault(m => m.Time == i);
                            //    var findOfPrecise = allOfBroadcast.SingleOrDefault(m => m.Time == i);
                            //    if (findOfBroadcast == null || findOfPrecise == null)
                            //    {
                            //        if (!fillWithZero) continue;

                            //        findOfBroadcast = new Ephemeris() { Time = i, Prn = prn };
                            //    }
                            //    writerOfBroadcast.WriteLine(findOfBroadcast.GetTabValues());
                            //    findOfPrecise.ClockBias = findOfPrecise.ClockBias - findOfBroadcast.ClockBias;
                            //    writerOfBroadcastError.WriteLine(findOfPrecise.GetTabValues());
                            //}
                        }
                        coll0 = EphemerisDataSourceFactory.Create(pathItem);
                        listPath.RemoveAt(index);
                        break;
                    }
                }
            }


            #endregion

            foreach (var item in prnWritersOfBroadcast)
            {
                item.Value.Flush();
                item.Value.Close();
            }
            foreach (var item in prnWritersOfBroadcastError)
            {
                item.Value.Flush();
                item.Value.Close();
            }

            Geo.Utils.FileUtil.OpenDirectory(directory);
        }