paul_vin Ответов: 2

Я хочу разбить строковый массив на основе _ в строке


Я беру некоторые значения из базы данных, а затем я хочу разделить эти значения, а затем
найдите наибольшее число из этих значений

Что я уже пробовал:

У меня есть функция
1)
<pre> public DataSet AutogenerateServiceno()
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("Proc_autogeneratesvno1", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
           
        }

это дает мне значения в ds как
sv_10
sv_11
sv_12
sv_4
sv_9


2) я вызываю вышеуказанную функцию из другой функции, как показано ниже

 public string AutogenerateSvno()
        {
            string s2 = "sv_";
            DataSet ds = objdal.AutogenerateServiceno(); //  here values in s=sv_10, sv_11, sv_12, sv_4, sv_9.
// now I want seperate Sv and number seperate and want to insert number in one // //arrar and number values in another array i.e values 10,11,12,4,9 in one array.
// then I want to find Highest Number from numeric array and in that number //increment by one and then concate that incremented number to sv_(number) and //return that values to presentation layer  for that I have written following code.
//but it giving exception at  
                arrval1[i] =Convert.ToString(arrvalues[i].Split('_'));
           
 string[] arrvalues = new string[ds.Tables[0].Rows.Count];
            string[] arrval1 = new string[ds.Tables[0].Rows.Count];
            int[] arrval = new int[ds.Tables[0].Rows.Count];

            //loopcounter
            for (int loopcounter = 0; loopcounter < ds.Tables[0].Rows.Count; loopcounter++)
            {
                string str;
               // .Split('_');
                //assign dataset values to array
                arrvalues[loopcounter] =ds.Tables[0].Rows[loopcounter]["svno"].ToString();
            }
            for (int i = 0; i < arrval.Length - 1; i++)
            {
                arrval1[i] =Convert.ToString(arrvalues[i].Split('_'));  // Error Here
                arrval[i] = int.Parse(arrval1[i]);
            }
            //string[] s1 = s.Split('_');
            //int i = int.Parse(s1[1]);
            //i++;
            //s2 = s2 + i
            return s2;
        }

PIEBALDconsult

Конечно, тут есть ошибка. Я предполагаю, что вы, возможно, захотите проиндексировать массив, который возвращает Split.
В любом случае, вам не нужно использовать Convert.Метод toString .

2 Ответов

Рейтинг:
2

Graeme_Grant

Я предполагаю, что это то, что вы ищете:

var list = new List<string>()
    { "sv_10", "sv_11", "sv_12", "sv_4", "sv_9" };

var best = list.OrderByDescending(x => int.Parse(x.Split(new[] { '_' }).Last()))
                .First();


Рейтинг:
1

OriginalGriff

Мы не можем сказать-слишком многое зависит от ваших данных (к которым у нас нет доступа) и других факторов во время выполнения кода (чего мы не можем сделать, потому что у нас нет доступа к вашим данным).
Так что все будет зависеть от вас.
Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что именно то, что вы ожидали, произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас-вам пора освоить новый (и очень, очень полезный) навык: отладку!