Ошибка при разделении с помощью C#
В таблице записывается следующее
FarmerQuestions (Table Colunm name) "Área de Feijão":"1",Melhor Resistente à Seca" "Com Maior;Que vai fazer":"Aument área"
Из вышесказанного я хочу получить следующий результат
Área de Feijão Melhor Resistente à Seca Com Maior;Que vai fazer 1 Null Aumnet área
Csharp код следующим образом для разделения, чтобы получить выше вывода
var othercols = dtFarmerReports.AsEnumerable().SelectMany(x =>
x.Field<string>("farm_detailsdata").Split(new string[] { ":", "," }, StringSplitOptions.RemoveEmptyEntries).Where((y, i) => i % 2 == 0)).Distinct().Select(x => new DataColumn(x, typeof(string))).ToList(); foreach (DataColumn oc in othercols) dtFarmerReports.Columns.Add(oc); foreach (DataRow dr in dtFarmerReports.Rows) { foreach (DataColumn oc in othercols) dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',') .Where(y => y.Contains(oc.ColumnName)).Select(z => z.Split(':')[1]).FirstOrDefault()); } dtFarmerReports.Columns.Remove(dtFarmerReports.Columns["farm_detailsdata"]); for (int r = 0; r < dtFarmerReports.Rows.Count; r++) { DataRow dr = dtFarmerReports.Rows[r]; for (int c = 0; c < dr.Table.Columns.Count; c++) worksheet.Cells[r + 2, c + 1].Value = dr[c]; }
Когда я запускаю приведенный выше код показывает ошибку следующим образом в приведенной ниже строке
dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',')
Ошибка показывает, что индекс находился за пределами границы массива
Строка, которую я разделил, не содержит символа ':' во втором значении
Melhor Resistente à Seca" так что это показывает нижеприведенную ошибку
Индекс находился вне границы массива
Ниже приведен код следующим образом
var othercols = dtFarmerReports.AsEnumerable().SelectMany(x => x.Field<string>("farm_detailsdata").Split(new string[] { ":", "," },
здесь в приведенном выше коде я проверяю split с двоеточием и запятой, предположим, что в значении colon not there отображается ошибка
как исправить эту ошибку какие изменения я должен внести в свой приведенный выше код разделения
Что я уже пробовал:
В таблице записывается следующее
FarmerQuestions (Table Colunm name) "Área de Feijão":"1",Melhor Resistente à Seca" "Com Maior;Que vai fazer":"Aument área"
Из вышесказанного я хочу получить следующий результат
Área de Feijão Melhor Resistente à Seca Com Maior;Que vai fazer 1 Null Aumnet área
Csharp код следующим образом для разделения, чтобы получить выше вывода
var othercols = dtFarmerReports.AsEnumerable().SelectMany(x => x.Field<string>("farm_detailsdata").Split(new string[] { ":", "," }, StringSplitOptions.RemoveEmptyEntries).Where((y, i) => i % 2 == 0)).Distinct().Select(x => new DataColumn(x, typeof(string))).ToList(); foreach (DataColumn oc in othercols) dtFarmerReports.Columns.Add(oc); foreach (DataRow dr in dtFarmerReports.Rows) { foreach (DataColumn oc in othercols) dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',') .Where(y => y.Contains(oc.ColumnName)).Select(z => z.Split(':')[1]).FirstOrDefault()); } dtFarmerReports.Columns.Remove(dtFarmerReports.Columns["farm_detailsdata"]); for (int r = 0; r < dtFarmerReports.Rows.Count; r++) { DataRow dr = dtFarmerReports.Rows[r]; for (int c = 0; c < dr.Table.Columns.Count; c++) worksheet.Cells[r + 2, c + 1].Value = dr[c]; }
Когда я запускаю приведенный выше код показывает ошибку следующим образом в приведенной ниже строке
dr.SetField(oc, dr.Field<string>("farm_detailsdata").Split(',')
Ошибка показывает, что индекс находился за пределами границы массива
Строка, которую я разделил, не содержит символа ':' во втором значении
Melhor Resistente à Seca" так что это показывает нижеприведенную ошибку
Индекс находился вне границы массива
Ниже приведен код следующим образом
var othercols = dtFarmerReports.AsEnumerable().SelectMany(x => x.Field<string>("farm_detailsdata").Split(new string[] { ":", "," },
здесь в приведенном выше коде я проверяю split с двоеточием и запятой, предположим, что в значении colon not there отображается ошибка
как исправить эту ошибку какие изменения я должен внести в свой приведенный выше код разделения
Maciej Los
Опять репост?