示例#1
0
        private void loadFile_DROP(object sender, DragEventArgs e)
        {
            //if (Datas.Count() > 0)
            //Datas.Clear();
            try
            {
                string[] a = (string[])e.Data.GetData(DataFormats.FileDrop, false);

                if (a != null)
                {
                    for (int i = 0; i < a.Length; i++)
                    {
                        FileStream fs = new FileStream(a.GetValue(i).ToString(),
                                                       FileMode.Open, FileAccess.Read);

                        try
                        {
                            Data DataBufor = new Data();
                            DataBufor.SetFileName(Path.GetFileName(a.GetValue(i).ToString()));
                            StreamReader sr = new StreamReader(fs);

                            while (!sr.EndOfStream)
                            {
                                String bufor = sr.ReadLine();
                                if (String.IsNullOrEmpty(bufor))
                                {
                                    continue;
                                }

                                bufor = (bufor.Trim(' ')).ToLower();
                                String[] pociete = bufor.Split('=');
                                pociete[0] = pociete[0].TrimEnd(' ');
                                pociete[1] = pociete[1].Trim(' ');
                                if (pociete[0].Equals("f(x,y)") || pociete[0].Equals("f(x)") || pociete[0].Equals("f'(x)"))
                                {   //Pobieranie funkcji f(x,y), f(x), f'(x)
                                    String BuforujText = pociete[1];
                                    Dictionary <int, double> temporaryFunctionX = new Dictionary <int, double>();
                                    Dictionary <int, double> temporaryFunctionY = new Dictionary <int, double>();
                                    int maxRatioX = -1;
                                    int maxRatioY = -1;
                                    while (!String.IsNullOrEmpty(BuforujText))
                                    {
                                        BuforujText = BuforujText.Trim(' ');
                                        int  positionOfMinus = TryFindMinus(BuforujText);
                                        int  positionOfPlus  = TryFindSth(BuforujText, '+');
                                        int  positionOfX     = TryFindSth(BuforujText, 'x');
                                        int  positionOfY     = TryFindSth(BuforujText, 'y');
                                        bool subtract        = false;
                                        if (positionOfMinus == 0 || positionOfPlus == 0)
                                        {
                                            BuforujText = BuforujText.Remove(0, 1);
                                            if (positionOfMinus == 0)
                                            {
                                                subtract = true;
                                            }
                                            positionOfMinus = TryFindMinus(BuforujText);
                                            positionOfPlus  = TryFindSth(BuforujText, '+');
                                        }
                                        String toCut = BuforujText.Substring(0, (positionOfMinus < positionOfPlus) ? positionOfMinus : positionOfPlus);
                                        BuforujText = BuforujText.Remove(0, (positionOfMinus < positionOfPlus) ? positionOfMinus : positionOfPlus);
                                        String[] toOperate;
                                        if (positionOfX <= positionOfY)
                                        {
                                            toOperate = toCut.Split('x');
                                        }
                                        else
                                        {
                                            toOperate = toCut.Split('y');
                                        }

                                        if (toOperate.Length > 1 && !String.IsNullOrEmpty(toOperate[1]))
                                        {
                                            toOperate[1] = toOperate[1].Remove(toOperate[1].IndexOf('^'), 1);
                                        }

                                        int temp = (toOperate.Length > 1) ? (String.IsNullOrEmpty(toOperate[1]))?1:int.Parse(toOperate[1].Trim(' ')) : 0;
                                        if (temp > maxRatioX && positionOfX < positionOfY)
                                        {
                                            maxRatioX = temp;
                                        }
                                        else if (temp > maxRatioY && positionOfX > positionOfY)
                                        {
                                            maxRatioY = temp;
                                        }
                                        if (String.IsNullOrEmpty(toOperate[0]))
                                        {
                                            if (positionOfX <= positionOfY)
                                            {
                                                if (!temporaryFunctionX.ContainsKey(temp))
                                                {
                                                    temporaryFunctionX.Add(temp, (subtract) ? -1 : 1);
                                                }
                                            }
                                            else
                                            {
                                                if (!temporaryFunctionY.ContainsKey(temp))
                                                {
                                                    temporaryFunctionY.Add(temp, (subtract) ? -1 : 1);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            if (positionOfX <= positionOfY)
                                            {
                                                if (!temporaryFunctionX.ContainsKey(temp))
                                                {
                                                    temporaryFunctionX.Add(temp, double.Parse((subtract) ? "-" + toOperate[0].Trim(' ') : toOperate[0].Trim(' ')));
                                                }
                                                else
                                                {
                                                    temporaryFunctionX[temp] += double.Parse((subtract) ? "-" + toOperate[0].Trim(' ') : toOperate[0].Trim(' '));
                                                }
                                            }
                                            else
                                            {
                                                if (!temporaryFunctionY.ContainsKey(temp))
                                                {
                                                    temporaryFunctionY.Add(temp, double.Parse((subtract) ? "-" + toOperate[0].Trim(' ') : toOperate[0].Trim(' ')));
                                                }
                                                else
                                                {
                                                    temporaryFunctionY[temp] += double.Parse((subtract) ? "-" + toOperate[0].Trim(' ') : toOperate[0].Trim(' '));
                                                }
                                            }
                                        }
                                    }
                                    if (!pociete[0].Equals("f'(x)"))
                                    {
                                        DataBufor.AddFunctionX(temporaryFunctionX, maxRatioX);
                                        DataBufor.AddFunctionY(temporaryFunctionY, maxRatioY);
                                    }
                                    else
                                    {
                                        DataBufor.AddDerivative(temporaryFunctionX, maxRatioX);
                                    }
                                }
                                else if (pociete[1].Equals("?"))
                                {
                                    //Pobieranie wartości szukanej
                                    pociete[0] = (pociete[0].Remove(pociete[0].IndexOf(")"), 1)).Remove(pociete[0].IndexOf("f("), 2);
                                    DataBufor.SetToFind(Double.Parse(pociete[0].Trim(' ')));
                                    ;
                                }
                                else if (pociete[0].Equals("xk"))
                                {
                                    //Pobranie wartości Xk
                                    DataBufor.SetXk(Double.Parse(pociete[1].Trim(' ')));
                                }
                                else if (pociete[0].Equals("xp"))
                                {
                                    DataBufor.SetXp(Double.Parse(pociete[1].Trim(' ')));
                                    //Pobranie wartości Xp
                                }
                                else if (pociete[0].Equals("n"))
                                {
                                    DataBufor.SetN(Double.Parse(pociete[1].Trim(' ')));
                                    //Pobranie wartości n
                                }
                                else if (pociete[0].Equals("prec"))
                                {
                                    DataBufor.SetPrecision(Double.Parse(pociete[1].Trim(' ')));
                                    //Pobranie wartości Dokładności
                                }
                                else
                                {
                                    //Pobranie punktu
                                    pociete[0] = (pociete[0].Remove(pociete[0].IndexOf(")"), 1)).Remove(pociete[0].IndexOf("f("), 2);
                                    DataBufor.AddPoint(new PointF(float.Parse(pociete[0].Trim(' ')), float.Parse(pociete[1].Trim(' '))));
                                }
                            }
                            Datas.Add(DataBufor);
                            sr.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Wykryto błąd składni pliku! Sprawdz czy używasz przecinków a nie kropek!");
                            Console.WriteLine(ex.ToString());
                        }
                        fs.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in DragDrop function: " + ex.Message);
            }
        }