Раньше не работал с регулярками, хороший пример чтоб потренироваться и научиться. Есть текст:
№ Вопрос Ответ
1 Дата звонка 08.08.2014
2 Время звонка 16:30
3 Имя оператора Иванов Иван
4 Номер телефона абонента 84957777777
5 Кто звонит
6 Номер карты
7 Препарат
8 Телефон
9 Комментарий тест звонок
В нём как бы 3 столбца - номер, характеристика и значение, они разделены табуляцией, но 3 столбца может и не быть, соответственно табуляции перед ним тоже. Нужна регулярка, которая вытаскивает значения всех этих столбцов.
Есть такой вариант:
var TdPattern = new Regex(
@"^ \s* (\d+) \s* \t ([^\t]+) \t \s* ([^\t]*) \s* $",
RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
Он работает, но выдаёт кривой результат, если после 2 "колонки" не идёт табуляция.
Считывайте файл построчно и пользуйтесь обычным string.Split()
, например:
class Data
{
public string Num { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
public static Data Parse(string s)
{
var parts = s.Split('\t');
var data = new Data { Num = parts[0] };
if (parts.Length > 1) data.Question = parts[1];
if (parts.Length > 2) data.Answer = parts[2];
return data;
}
}
Тогда загрузка будет выглядеть примерно так:
List<Data> list = File.ReadLines("путь к файлу")
.Select(Data.Parse)
.ToList();
Если данные не в файле, а в строковой переменной, то сплитьте ее сначала по переводам строки:
List<Data> list = text.Split(new[] { "\r\n" }, StringSplitOptions.None)
.Select(Data.Parse)
.ToList();
Символы перевода строки выберите подходящие, может вам достаточно будет просто '\n'
или '\r'
Если могут попадаться пустые строки - можно пропустить их с помощью опции StringSplitOptions.RemoveEmptyEntries
Если столбцы действительно разделены табуляторами, а не пробелами, то поможет следующее регулярное выражение: ^(\d+)\t(.*?)(?:\t(.*))?$
В случае же, если столбцы разделены несколькими пробелами, то можно попробовать что-то вроде такого: ^(\d+)\s\s+(.*?)(?:\s[^\S\n]+(.*))?$
Натолкнулся на проблему которую не могу решитьЕсть обработчик кнопки и в ней код, timer используется как контролл из ToolBox на форме
Необходимо задать собственную систему координат в CanvasЗначения X и значения Y не будут одинакового типа