2013-07-24 6 views
2

Я ищу строки, которые будут соответствовать моему регулярному выражению.C# insert regex match to datatable

var dataTable = new DataTable(); 
foreach (var columnName in new[] { "Category", "Device", "Data Type", "Value", "Status" }) 
dataTable.Columns.Add(columnName); 

Regex regex = new Regex(@"^(?:(?<C0>Put) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+))$"); 

var matches = lines.Select(line => regex.Match(line)); 

foreach (var match in matches)dataTable.Rows.Add(match.Groups.Cast<Group>().Skip(1).ToArray()); 

Мой вход

Put this inside datatable spec 

Теперь ставит все матчи в DataTable, но в обычном порядке. Я хотел бы указать, в какой колонке нужно поместить каждое слово. Например, я хочу уметь помещать слово «this» внутри столбца «Значение» и т. Д.

Я знаю из своей предыдущей темы (String separation C#), что я могу указать как-то match.Group ["C0"]. Значение, но я не знаю, как его реализовать здесь.

ответ

2

Вы можете создать свой заказ, предварительно создав экземпляр списка с элементами в нужном вам порядке, а затем преобразуйте их в массив.

dataTable.Rows.Add((new List<Group>{match.Groups["C0"], match.Groups["C1"]}).ToArray()); 

Вы можете событие пропустить список <> непосредственно создавая массив групп - это работает, а также:

dataTable.Rows.Add(new Group[] { match.Groups["C1"], match.Groups["C0"] }); 
+0

Я боюсь, что это не работает, он только дает это сообщение в первой колонке System.Collections.Generic.List'1 [System.Text.RegularExpressions.Group] – user2592968

+0

отредактированный ответ с .ToArray() Я забыл об этом. – Marwie

+0

Хорошо, вы правы, отлично работает. Спасибо за помощь. – user2592968