none
помогите разобраться с ошибкой в обработке строчек массива цифр RRS feed

  • Вопрос

  •  private void button4_Click(object sender, EventArgs e)
            {
                string[] input = {"d"};
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName); //читает массив
                    Name = openFileDialog1.FileName;
                    // string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i;
                    i = 0;
                    foreach (string line in lines)
                    {
                         
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            if (i == 5)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            }
                            
                            else
                       
                           
                           
                            
                            {
                                var x = int.Parse(m.Value, CultureInfo.InvariantCulture);
                                   
                                x = x > 28 ? (int) ((x + 0.0162)*30.517578125) : x;
                             
                                list.Add(x);
                              
                            }
                       
                            
                        }
                       
                    
                        }
                    
                }
            
             
                foreach (int x in list)
                {
                    int y;
                    y = x;
                    s += x;
                    v = x;
                    string t = "00000000";
                    string ss = "";
                    if (z > 65535)
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 8 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    else
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 4 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    string q = "00000000";
                    string w = "";
                    if (x > 4095)
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 8 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    else
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 4 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    if (v > 255)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
              //      r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                   
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
                
            }
        
        private void button5_Click(object sender, EventArgs e)
            {
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    Name = openFileDialog1.FileName;
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i = 0;
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var y = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            y = y > 28 ? y : y;
                            list.Add(y);
                            if (i == 4)
                            {
                                list.Add(bb);
                                list.Add(dd);
                                list.Add(hh);
                                list.Add(gg);
                                list.Add(k);
                            }
                          //  else
                         
                            i++;
                        }
                    }
                    foreach (double y in list)
                    {
                        double z;
                        z = y;
                        
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox 
                    }
                }
            }
                 
            public class Table
            {
                public string nomerparam { get; set; }
                public string name { get; set; }
                public string oboznach { get; set; }
                public string fizznach { get; set; }
                public string kod { get; set; }
                public string smeshenie { get; set; }
            }
            private static string[] Split2(string s)
            {
                int i = 0;
                bool flag = true;
                string[] arr = new string[154];
                foreach (char c in s.Trim().ToCharArray())
                {
                    if (c != ' ')
                    {
                        arr[i] += c;
                        flag = true;
                    }
                    else
                    {
                        if (flag == true) flag = false;
                        else if (arr[i] != null) i++;
                    }
                }
                return arr;
            }
            private void button3_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Name = openFileDialog1.FileName;
                    //textBox7.Clear();
                    // textBox1.Text = File.ReadAllText(Name);
                    //        dataGridView1.DataSource = File.ReadAllLines(openFileDialog1.FileName);
                    StreamReader Table = new StreamReader(Name, Encoding.GetEncoding(866));
                    List<Table> Tables = new List<Table>();
                    string[] arr = null;
                    for (string line = Table.ReadLine(); line != null; line = Table.ReadLine())
                    {
                        arr = Split2(line);
                        if (arr.Length > 6 && arr[0] != null && arr[1] != null && arr[2] != null && arr[3] != null &&
                            arr[4] != null && arr[5] != null)
                        {
                            Table table = new Table();
                            table.nomerparam = arr[0].Trim();
                            table.name = arr[1].Trim();
                            table.oboznach = arr[2].Trim();
                            table.fizznach = arr[3].Trim();
                            table.kod = arr[4].Trim();
                            table.smeshenie = arr[5].Trim();
                            Tables.Add(table);
                        }
                        //  {
                        //    Table.ReadLine();
                        // }
                    }
                    dataGridView1.DataSource = Tables;
                    int u = 0;
                    foreach (Table t in Tables)
                    {
                        if (u < textBox2.Lines.Length)
                        {
                            t.fizznach = textBox2.Lines[u];
                            t.kod= textBox3.Lines[u];
                            t.smeshenie = textBox6.Lines[u];
                            u++;
                        }
                    }
                }
            }

    Вот у меня есть код, когда я делаю точку останова на месте  if (i == 5)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            } , то появляется ошибка замены данных в поле Grida, то-есть здесь: t.kod= textBox3.Lines[u]; и здесь t.smeshenie = textBox6.Lines[u]; У меня из-за  этого возникает ошибка в конечном результате! Помогите разобраться с ошибкой!
    24 сентября 2013 г. 16:40

Ответы

  • Я понял, нужно вместо 5, поставить 4, тогда все строчки на одну вверх поднимутся!


    Нет, я ошибся, теперь затирается верхняя цифра в массиве, стоящая перед пятью вставленными строчками!


    И я даже уже поднял строчки вверх!  И опустил в методе button5_Click строчку list.add(y)под else, добавив оператор else! Что выровняло значения в list.add(x) и в list.add(y).

    и выровнял значения в двух списках, теперь ничего не съезжает, но стирается предыдущие значение из списка.
    • Помечено в качестве ответа georgushek 5 октября 2013 г. 6:24
    25 сентября 2013 г. 14:17
  • Остался ещё один вопрос, как в цифрах, которых я выделил курсивом, представленных в экспоненциальном виде вместо 2 на конце сделать 4?

    В конце этих чисел нужно добавить два нуля! И все получается
    26 сентября 2013 г. 5:47
  •        private void button4_Click(object sender, EventArgs e)
            {
                string[] input = { "d" };
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);//читает массив
                    Name = openFileDialog1.FileName;
                    // string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i;
                    i = 0;
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var x = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            x = x > 28 ? (int)((x + 0.0162) * 30.517578125) : x;
                            list.Add(x);
                            
                            if (i == 4)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            }
                       //     else
                            {
                               
                            }
                            i++;
                        }
                    }
                }
                      
                    
                    
                
            
             
                foreach (int x in list)
                {
                    int y;
                    y = x;
                    s += x;
                    v = x;
                    string q = "00000000";
                    string w = "";
                    if (x > 4095)
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 8 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    else
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 4 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                  /*  if (v > 10000)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }*/
                    string t = "00000000";
                    string ss = "";
                    if (z > 65535)
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 8 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    else
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 4 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    
                    if (null_count(v) > 2)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
                   
                  
                 
                  // r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                   
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
                
                }
            int null_count(int val)
            {
                int count = 0;
                while (val > 0)
                {
                    if (val % 16 > 0) count++; 
                    val = val / 16;
                }
                return count;
            }
            //}
        
        private void button5_Click(object sender, EventArgs e)
            {
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    Name = openFileDialog1.FileName;
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i = 0;
                   
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var y = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            y = y > 28 ? y : y;
                            list.Add(y);
                           
                            
                           if (i==4)
                            
                           
                            
                            
                            {
                                list.Add(bb);
                                list.Add(dd);
                                list.Add(hh);
                                list.Add(gg);
                                list.Add(k);
                            }
                           i++;
                          // else
                           
                          // list.Add(y);
                               
                        }
                        
                    }
                      
                    foreach (double y in list)
                    {
                        double z;
                        z = y;
                        
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox 
                    }
     
                }
            }

    Здравствуйте! Вот, переделанный алгоритм кода, и это конечный результат, для это программы.

    Я убрал от сюда else, переделал алгоритм, вместо подсчета знаков в цифрах и используется подсчет количества цифр без нулей!

    if (null_count(v) > 2)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
                  
                 
                
                  // r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                  
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
               
                }
            int null_count(int val)
            {
                int count = 0;
                while (val > 0)
                {
                    if (val % 16 > 0) count++;
                    val = val / 16;
                }
                return count;
            }
            //}

    Вместо:  /*  if (v > 10000)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }*/

    • Помечено в качестве ответа georgushek 5 октября 2013 г. 6:23
    4 октября 2013 г. 17:51

Все ответы

  • ошибка следующего содержания: Язык C#(FORM)

    24 сентября 2013 г. 16:50
  • В методе  button4_Click переменная i не меняет значения, поэтому if(i == 5) всегда ложно.
    24 сентября 2013 г. 16:57
  • А как же оператор else?

    24 сентября 2013 г. 16:59
  • В том листинге, что Вы привели i значение не меняет. В  button5_Click - да, а в  button4_Click - нет.
    24 сентября 2013 г. 17:02
  • А я понял i++ не хватает? А вот смотрите, если есть строчка: 5 0005 0022, почему она может заменяться на: 5.0000000000E+0000 0000507 0024 в результате, вместо такой контрольной суммы:041A2BF3 получае такую: 041A2BEE Как это иправить, перед строчкой 5 0005 0022, стоят эти числа:if (i == 5) { list.Add(b); list.Add(d); list.Add(h); list.Add(g); list.Add(k); } , а перед этими числами другие числа из массива, которые бируться из файла txt! А эти пять чисел , вставляются в массив после пятой позиции! А эта строчка, тоже из того-же файла! Но она портится и получается другая строчка:5.0000000000E+0000 0000507 0024. И есть еще такие строчки кода: dataGridView1.DataSource = Tables; int u = 0; foreach (Table t in Tables) { if (u < textBox2.Lines.Length) { t.fizznach = textBox2.Lines[u]; t.kod= textBox3.Lines[u]; t.smeshenie = textBox6.Lines[u]; u++; } } } Которые, как я думаю и влияют на это, но это мои догатки, а как правильно не знаю, очень прошу помочь!
    24 сентября 2013 г. 17:25
  • Трудно понять логику чужого кода. Объясните словами, что Вы хотите сделать? Каковы исходные данные и каков должен быть результат?
    24 сентября 2013 г. 18:24
  • Это задаем:=5;
    :=45950;
    :=17000;
    :=45950;
    :=0;
    :=5;
    :=675;
    :=1005;
    :=1135;
    :=1500;
    :=3900;
    :=3;
    :=4;
    :=3;
    :=2;
    :=3; А это получаем

                  5                                   0005         0000                                       
                  4.5950000000E+0004  001565AB 0002                                              
                 1.7000000000E+0004  0007EA8F  0006                                              
                 4.5950000000E+0004  001565AB  000A                                              
                 0                                   0000          000E                                             
                 5.0000000000E+0004  00174877  0010                                              
                 5.1000000000E+0004  0017BFAC  0014                                              
                 5.0100000000E+0004  00175463  0018                                              
                 5.0900000000E+0004  0017B3C1  001C                                              
                 7680                             1E00          0020          с этого момента все съезжает!                
                 5                                   0005          0022                                              
                 6.7500000000E+0002  00005077  0024                                              
                 1.0050000000E+0003  000077CE  0028                                              
                 1.1350000000E+0003  0000874D  002C                                              
                 1.5000000000E+0003  0000B2D0  0030                                              
                 3.9000000000E+0003  0001D0EB  0034                                              
                 3                                   0003           0038                                              
                 4                                   0004           003A                                              
                 3                                   0003           003C                                              
                 2                                   0002           003E                                              
                 3                                   0003           0040              

    А вот что получается у меня:                                

    5.0000000000E+0000 0005 0000
    4.5950000000E+0004 001565AB 0002
    1.7000000000E+0004 0007EA8F 0006
    4.5950000000E+0004 001565AB 000A
    0.0000000000E+0000 0000 000E
    5.0000000000E+0002 00174877 0010
    5.1000000000E+0002 0017BFAC 0014
    5.0100000000E+0002 00175463 0018
    5.0900000000E+0002 0017B3C1 001C
    7.6800000000E+0003 00001E00 0020
    5.0000000000E+0000 00005077 0024
    6.7500000000E+0002 000077CE 0028
    1.0050000000E+0003 0000874D 002C
    1.1350000000E+0003 0000B2D0 0030
    1.5000000000E+0003 0001D0EB 0034
    3.9000000000E+0003 0003 0038
    3.0000000000E+0000 0004 003A
    4.0000000000E+0000 0003 003C
    3.0000000000E+0000 0002 003E
    2.0000000000E+0000 0003 0040
    3.0000000000E+0000 0000 0042

    Выделенные курсивом числа вставляются вот-так: if (i == 5)
    {
    list.Add(b);
    list.Add(d);
    list.Add(h);
    list.Add(g);
    list.Add(k);

    Как это исправить? Вывод через TextBox в DataGridView! Вот эти строчки кода:  dataGridView1.DataSource = Tables;
                   
    int u = 0;
                   
    foreach (Table t in Tables)
                   
    {
                       
    if (u < textBox2.Lines.Length)
                       
    {
                            t
    .fizznach = textBox2.Lines[u];
                            t
    .kod= textBox3.Lines[u];
                            t
    .smeshenie = textBox6.Lines[u];
                            u
    ++;
                       
    }
                   
    }
               
    }

    • Изменено georgushek 24 сентября 2013 г. 19:09
    24 сентября 2013 г. 19:02
  • Я понял, нужно вместо 5, поставить 4, тогда все строчки на одну вверх поднимутся!
    25 сентября 2013 г. 5:01
  • Остался ещё один вопрос, как в цифрах, которых я выделил курсивом, представленных в экспоненциальном виде вместо 2 на конце сделать 4?
    25 сентября 2013 г. 5:08
  • Я понял, нужно вместо 5, поставить 4, тогда все строчки на одну вверх поднимутся!

    Нет, я ошибся, теперь затирается верхняя цифра в массиве, стоящая перед пятью вставленными строчками!

    • Изменено georgushek 25 сентября 2013 г. 6:26
    25 сентября 2013 г. 6:25
  • помогите пожалуйста, я зашел в тупик! Мне кажется из-за того что, используется знак == значение, задаваемое в list.add(...); заменяет значение в list.add(x). Если это так, то как от этого избавиться? Вот у меня есть столбец 12 4 5 мы задаем ==3, а вместо этого 3 заменяет 2! И получается 1345, вместо того чтобы получить 12345!

    25 сентября 2013 г. 10:28
  • Повторяю еще раз. Ваш код не понятен. И разбираться в нем малоинтересно. Отвлекитесь от него. Если хотите получить решение проблемы, опишите задачу. Вот есть у Вас группа текстовых файлов с данными. Как эти данные в них располагаются? Приведите пример нескольких строк (причем со всеми пробелами и другими разделителями - точно). Их нужно считать и как-то обработать. Как? Что должно получиться? Тоже группа строк или что-то другое? Каков должен быть формат этих результатов? Тоже точно поясните. Куда Вы их потом запишете: в DataGridView или еще куда нибудь - неважно. Важно то, что Вы туда должны записать.
    25 сентября 2013 г. 11:45
  • Я это уже описал ранее!
    25 сентября 2013 г. 11:48
  • Что Вы описали? "Я хочу, чтобы было так, а у меня вот так". А почему должно быть ТАК? Как из исходных данных получаются результаты?
    25 сентября 2013 г. 11:52
  • Я написал пример строчек, котоные подаются на вход, то чего должно получится и что получается! И код написал, и даже написал в каком формате сохраняется (txt)!
    25 сентября 2013 г. 12:07
  • Почему из 16 строчек получается 21? И почему в каждой результирующей строке по 3 значения?
    25 сентября 2013 г. 12:13
  • Я вам не так написал вопрос!

    • Изменено georgushek 25 сентября 2013 г. 12:33
    25 сентября 2013 г. 12:32
  • Это задаем:=5;
    :=45950;
    :=17000;
    :=45950;
    :=0;
    :=5;
    :=675;
    :=1005;
    :=1135;
    :=1500;
    :=3900;
    :=3;
    :=4;
    :=3;
    :=2;
    :=3; А это получаем

                  5                                   0005         0000                                       
                  4.5950000000E+0004  001565AB 0002                                              
                 1.7000000000E+0004  0007EA8F  0006                                              
                 4.5950000000E+0004  001565AB  000A                                              
                 0                                   0000          000E                                             
                 5.0000000000E+0004  00174877  0010                                              
                 5.1000000000E+0004  0017BFAC  0014                                              
                 5.0100000000E+0004  00175463  0018                                              
                 5.0900000000E+0004  0017B3C1  001C                                              
                 7680                             1E00          0020          с этого момента все съезжает!                
                 5                                   0005          0022                                              
                 6.7500000000E+0002  00005077  0024                                              
                 1.0050000000E+0003  000077CE  0028                                              
                 1.1350000000E+0003  0000874D  002C                                              
                 1.5000000000E+0003  0000B2D0  0030                                              
                 3.9000000000E+0003  0001D0EB  0034                                              
                 3                                   0003           0038                                              
                 4                                   0004           003A                                              
                 3                                   0003           003C                                              
                 2                                   0002           003E                                              
                 3                                   0003           0040              

    А вот что получается у меня:                                

    5.0000000000E+0000 0005 0000
    4.5950000000E+0004 001565AB 0002
    1.7000000000E+0004 0007EA8F 0006
    4.5950000000E+0004 001565AB 000A
    0.0000000000E+0000 0000 000E
    5.0000000000E+0002 00174877 0010
    5.1000000000E+0002 0017BFAC 0014
    5.0100000000E+0002 00175463 0018
    5.0900000000E+0002 0017B3C1 001C
    7.6800000000E+0003 00001E00 0020
    5.0000000000E+0000 00005077 0024
    6.7500000000E+0002 000077CE 0028
    1.0050000000E+0003 0000874D 002C
    1.1350000000E+0003 0000B2D0 0030
    1.5000000000E+0003 0001D0EB 0034
    3.9000000000E+0003 0003 0038
    3.0000000000E+0000 0004 003A
    4.0000000000E+0000 0003 003C
    3.0000000000E+0000 0002 003E
    2.0000000000E+0000 0003 0040
    3.0000000000E+0000 0000 0042

    Выделенные курсивом числа вставляются вот-так: if (i == 5)
    {
    list.Add(b);
    list.Add(d);
    list.Add(h);
    list.Add(g);
    list.Add(k);

    Как это исправить? Вывод через TextBox в DataGridView! Вот эти строчки кода:  dataGridView1.DataSource = Tables;
                   
    int u = 0;
                   
    foreach (Table t in Tables)
                   
    {
                       
    if (u < textBox2.Lines.Length)
                       
    {
                            t
    .fizznach = textBox2.Lines[u];
                            t
    .kod= textBox3.Lines[u];
                            t
    .smeshenie = textBox6.Lines[u];
                            u
    ++;
                       
    }
                   
    }
               
    }

    Вот, пример ввода и вывода, и как должно быть!

    25 сентября 2013 г. 12:35
  • помогите пожалуйста, я зашел в тупик! Мне кажется из-за того что, используется знак == значение, задаваемое в list.add(...); заменяет значение в list.add(x). Если это так, то как от этого избавиться? Вот у меня есть столбец 12 4 5 мы задаем ==3, а вместо этого 3 заменяет 2! И получается 1345, вместо того чтобы получить 12345!


    Вот, я объясняю как должно быть и как получается!
    25 сентября 2013 г. 12:39
  •  private void button4_Click(object sender, EventArgs e)
            {
                string[] input = {"d"};
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName); //читает массив
                    Name = openFileDialog1.FileName;
                    // string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i;
                    i = 0;
                    foreach (string line in lines)
                    {
                         
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            if (i == 5)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            }
                            
                            else
                       
                           
                           
                            
                            {
                                var x = int.Parse(m.Value, CultureInfo.InvariantCulture);
                                   
                                x = x > 28 ? (int) ((x + 0.0162)*30.517578125) : x;
                             
                                list.Add(x);
                              
                            }
                       
                            
                        }
                       
                    
                        }
                    
                }
            
             
                foreach (int x in list)
                {
                    int y;
                    y = x;
                    s += x;
                    v = x;
                    string t = "00000000";
                    string ss = "";
                    if (z > 65535)
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 8 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    else
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 4 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    string q = "00000000";
                    string w = "";
                    if (x > 4095)
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 8 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    else
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 4 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    if (v > 255)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
              //      r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                   
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
                
            }
        
        private void button5_Click(object sender, EventArgs e)
            {
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    Name = openFileDialog1.FileName;
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i = 0;
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var y = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            y = y > 28 ? y : y;
                            list.Add(y);
                            if (i == 4)
                            {
                                list.Add(bb);
                                list.Add(dd);
                                list.Add(hh);
                                list.Add(gg);
                                list.Add(k);
                            }
                          //  else
                         
                            i++;
                        }
                    }
                    foreach (double y in list)
                    {
                        double z;
                        z = y;
                        
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox 
                    }
                }
            }
                 
            public class Table
            {
                public string nomerparam { get; set; }
                public string name { get; set; }
                public string oboznach { get; set; }
                public string fizznach { get; set; }
                public string kod { get; set; }
                public string smeshenie { get; set; }
            }
            private static string[] Split2(string s)
            {
                int i = 0;
                bool flag = true;
                string[] arr = new string[154];
                foreach (char c in s.Trim().ToCharArray())
                {
                    if (c != ' ')
                    {
                        arr[i] += c;
                        flag = true;
                    }
                    else
                    {
                        if (flag == true) flag = false;
                        else if (arr[i] != null) i++;
                    }
                }
                return arr;
            }
            private void button3_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Name = openFileDialog1.FileName;
                    //textBox7.Clear();
                    // textBox1.Text = File.ReadAllText(Name);
                    //        dataGridView1.DataSource = File.ReadAllLines(openFileDialog1.FileName);
                    StreamReader Table = new StreamReader(Name, Encoding.GetEncoding(866));
                    List<Table> Tables = new List<Table>();
                    string[] arr = null;
                    for (string line = Table.ReadLine(); line != null; line = Table.ReadLine())
                    {
                        arr = Split2(line);
                        if (arr.Length > 6 && arr[0] != null && arr[1] != null && arr[2] != null && arr[3] != null &&
                            arr[4] != null && arr[5] != null)
                        {
                            Table table = new Table();
                            table.nomerparam = arr[0].Trim();
                            table.name = arr[1].Trim();
                            table.oboznach = arr[2].Trim();
                            table.fizznach = arr[3].Trim();
                            table.kod = arr[4].Trim();
                            table.smeshenie = arr[5].Trim();
                            Tables.Add(table);
                        }
                        //  {
                        //    Table.ReadLine();
                        // }
                    }
                    dataGridView1.DataSource = Tables;
                    int u = 0;
                    foreach (Table t in Tables)
                    {
                        if (u < textBox2.Lines.Length)
                        {
                            t.fizznach = textBox2.Lines[u];
                            t.kod= textBox3.Lines[u];
                            t.smeshenie = textBox6.Lines[u];
                            u++;
                        }
                    }
                }
            }

    Вот у меня есть код, когда я делаю точку останова на месте  if (i == 5)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            } , то появляется ошибка замены данных в поле Grida, то-есть здесь: t.kod= textBox3.Lines[u]; и здесь t.smeshenie = textBox6.Lines[u]; У меня из-за  этого возникает ошибка в конечном результате! Помогите разобраться с ошибкой!

    Вот код!
    25 сентября 2013 г. 12:42
  • Я понял, нужно вместо 5, поставить 4, тогда все строчки на одну вверх поднимутся!


    Нет, я ошибся, теперь затирается верхняя цифра в массиве, стоящая перед пятью вставленными строчками!


    И я даже уже поднял строчки вверх!  И опустил в методе button5_Click строчку list.add(y)под else, добавив оператор else! Что выровняло значения в list.add(x) и в list.add(y).
    25 сентября 2013 г. 12:58
  • Полная и бесповоротная галиматья !!!
    25 сентября 2013 г. 13:09
  • почему?
    25 сентября 2013 г. 13:13
  • Потому что Вы уже целый год топчетесь на одном и том же месте, 
    и никакого прогресса -
    одни и те же вопросы по строковым преобразованиям.
    А это самое простое в программировании, поверьте.
    Нужно почитать книжки,
    или уж заняться чем-нибудь по-проще.
    25 сентября 2013 г. 13:24
  • Я задал вопрос другой, я вставляю пять цифр в созданный до этого список, а именно после пятой цифры в созданном до этого списке, но почему-то стерается цифра из этого списка!

    25 сентября 2013 г. 14:05
  • Это задаем:=5;
    :=45950;
    :=17000;
    :=45950;
    :=0;
    :=5;
    :=675;
    :=1005;
    :=1135;
    :=1500;
    :=3900;
    :=3;
    :=4;
    :=3;
    :=2;
    :=3; А это получаем

                  5                                   0005         0000                                       
                  4.5950000000E+0004  001565AB 0002                                              
                 1.7000000000E+0004  0007EA8F  0006                                              
                 4.5950000000E+0004  001565AB  000A                                              
                 0                                   0000          000E                                             
                 5.0000000000E+0004  00174877  0010                                              
                 5.1000000000E+0004  0017BFAC  0014                                              
                 5.0100000000E+0004  00175463  0018                                              
                 5.0900000000E+0004  0017B3C1  001C                                              
                 7680                             1E00          0020          с этого момента все съезжает!                
                 5                                   0005          0022                                              
                 6.7500000000E+0002  00005077  0024                                              
                 1.0050000000E+0003  000077CE  0028                                              
                 1.1350000000E+0003  0000874D  002C                                              
                 1.5000000000E+0003  0000B2D0  0030                                              
                 3.9000000000E+0003  0001D0EB  0034                                              
                 3                                   0003           0038                                              
                 4                                   0004           003A                                              
                 3                                   0003           003C                                              
                 2                                   0002           003E                                              
                 3                                   0003           0040              

    А вот что получается у меня:                                

    5.0000000000E+0000 0005 0000
    4.5950000000E+0004 001565AB 0002
    1.7000000000E+0004 0007EA8F 0006
    4.5950000000E+0004 001565AB 000A
    0.0000000000E+0000 0000 000E
    5.0000000000E+0002 00174877 0010
    5.1000000000E+0002 0017BFAC 0014
    5.0100000000E+0002 00175463 0018
    5.0900000000E+0002 0017B3C1 001C
    7.6800000000E+0003 00001E00 0020
    5.0000000000E+0000 00005077 0024
    6.7500000000E+0002 000077CE 0028
    1.0050000000E+0003 0000874D 002C
    1.1350000000E+0003 0000B2D0 0030
    1.5000000000E+0003 0001D0EB 0034
    3.9000000000E+0003 0003 0038
    3.0000000000E+0000 0004 003A
    4.0000000000E+0000 0003 003C
    3.0000000000E+0000 0002 003E
    2.0000000000E+0000 0003 0040
    3.0000000000E+0000 0000 0042

    Выделенные курсивом числа вставляются вот-так: if (i == 5)
    {
    list.Add(b);
    list.Add(d);
    list.Add(h);
    list.Add(g);
    list.Add(k);

    Как это исправить? Вывод через TextBox в DataGridView! Вот эти строчки кода:  dataGridView1.DataSource = Tables;
                   
    int u = 0;
                   
    foreach (Table t in Tables)
                   
    {
                       
    if (u < textBox2.Lines.Length)
                       
    {
                            t
    .fizznach = textBox2.Lines[u];
                            t
    .kod= textBox3.Lines[u];
                            t
    .smeshenie = textBox6.Lines[u];
                            u
    ++;
                       
    }
                   
    }
               
    }

    Вот, пример ввода и вывода, и как должно быть!


    Вот, как я это делаю!
    25 сентября 2013 г. 14:07
  • Я дополнил это уже! изменив цифру 5 на 4
    25 сентября 2013 г. 14:12
  • Я понял, нужно вместо 5, поставить 4, тогда все строчки на одну вверх поднимутся!


    Нет, я ошибся, теперь затирается верхняя цифра в массиве, стоящая перед пятью вставленными строчками!


    И я даже уже поднял строчки вверх!  И опустил в методе button5_Click строчку list.add(y)под else, добавив оператор else! Что выровняло значения в list.add(x) и в list.add(y).

    и выровнял значения в двух списках, теперь ничего не съезжает, но стирается предыдущие значение из списка.
    • Помечено в качестве ответа georgushek 5 октября 2013 г. 6:24
    25 сентября 2013 г. 14:17
  • Почему,  не знаете, так и говорите, что не знаю, не надо мне это выговаривать, это форум. А знаете, тогда говорите по существу!

    25 сентября 2013 г. 14:21
  • Я чистосердечно хочу Вам помочь,
    но Ваша программа - это бессмысленный набор каких-то операторов.
    Никакой логики, поверьте!
    Даже если Вы год назад начали с нуля,
    то сейчас, через год, писать такую программу - это полный нонсенс.
    Поверьте моему опыту, я давно уже не молод,
    программирование не для всех.
    Вы могли бы стать прекрасным специалистом в чем-то другом,
    но не в программировании.
    Не обижайтесь и не теряйте времени зря,
    Ищите свое место в этой жизни!
    25 сентября 2013 г. 14:56
  • Вперед и с песней!
    Удачи!
    25 сентября 2013 г. 16:40
  • Остался ещё один вопрос, как в цифрах, которых я выделил курсивом, представленных в экспоненциальном виде вместо 2 на конце сделать 4?

    В конце этих чисел нужно добавить два нуля! И все получается
    26 сентября 2013 г. 5:47
  •        private void button4_Click(object sender, EventArgs e)
            {
                string[] input = { "d" };
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);//читает массив
                    Name = openFileDialog1.FileName;
                    // string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i;
                    i = 0;
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var x = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            x = x > 28 ? (int)((x + 0.0162) * 30.517578125) : x;
                            list.Add(x);
                            
                            if (i == 4)
                            {
                                list.Add(b);
                                list.Add(d);
                                list.Add(h);
                                list.Add(g);
                                list.Add(k);
                            }
                       //     else
                            {
                               
                            }
                            i++;
                        }
                    }
                }
                      
                    
                    
                
            
             
                foreach (int x in list)
                {
                    int y;
                    y = x;
                    s += x;
                    v = x;
                    string q = "00000000";
                    string w = "";
                    if (x > 4095)
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 8 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                    else
                    {
                        w = x.ToString("x");
                        w = q.Substring(0, 4 - w.Length) + w;
                        textBox3.Text += w + System.Environment.NewLine;
                    }
                  /*  if (v > 10000)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }*/
                    string t = "00000000";
                    string ss = "";
                    if (z > 65535)
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 8 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    else
                    {
                        ss = z.ToString("x");
                        ss = t.Substring(0, 4 - ss.Length) + ss;
                        textBox6.Text += ss + System.Environment.NewLine;
                    }
                    
                    if (null_count(v) > 2)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
                   
                  
                 
                  // r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                   
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
                
                }
            int null_count(int val)
            {
                int count = 0;
                while (val > 0)
                {
                    if (val % 16 > 0) count++; 
                    val = val / 16;
                }
                return count;
            }
            //}
        
        private void button5_Click(object sender, EventArgs e)
            {
                List<int> list = new List<int>(); // создает массив
                // var values = string.Split(new char[] { ' ' },
                //StringSplitOptions.RemoveEmptyEntries);
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string pattern = @"[0-9,\.]+$";
                    Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase);
                    Name = openFileDialog1.FileName;
                    string[] lines = File.ReadAllLines(openFileDialog1.FileName);
                    int i = 0;
                   
                    foreach (string line in lines)
                    {
                        Match m = rgx.Match(line.TrimEnd(';'));
                        if (m.Success)
                        {
                            var y = int.Parse(m.Value, CultureInfo.InvariantCulture);
                            y = y > 28 ? y : y;
                            list.Add(y);
                           
                            
                           if (i==4)
                            
                           
                            
                            
                            {
                                list.Add(bb);
                                list.Add(dd);
                                list.Add(hh);
                                list.Add(gg);
                                list.Add(k);
                            }
                           i++;
                          // else
                           
                          // list.Add(y);
                               
                        }
                        
                    }
                      
                    foreach (double y in list)
                    {
                        double z;
                        z = y;
                        
                        textBox4.Text += y.ToString() + System.Environment.NewLine;
                        textBox2.Text += z.ToString("0.0000000000E+0000", CultureInfo.InvariantCulture) + System.Environment.NewLine; //записываает строчку в texBox 
                    }
     
                }
            }

    Здравствуйте! Вот, переделанный алгоритм кода, и это конечный результат, для это программы.

    Я убрал от сюда else, переделал алгоритм, вместо подсчета знаков в цифрах и используется подсчет количества цифр без нулей!

    if (null_count(v) > 2)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }
                  
                 
                
                  // r = s;
                    textBox1.Text += y.ToString() + System.Environment.NewLine;
                  
                }
                textBox7.Text += "0" + (s).ToString("x") + System.Environment.NewLine;
               
                }
            int null_count(int val)
            {
                int count = 0;
                while (val > 0)
                {
                    if (val % 16 > 0) count++;
                    val = val / 16;
                }
                return count;
            }
            //}

    Вместо:  /*  if (v > 10000)
                    {
                        z += 4;
                    }
                    else
                    {
                        z += 2;
                    }*/

    • Помечено в качестве ответа georgushek 5 октября 2013 г. 6:23
    4 октября 2013 г. 17:51