Есть csv файл. В нем строки в формате 1234,123456 - это правильный формат строки. Но в нем попадаются неправильные строки, например 123,123456 или 1234,1234. А так же иногда попадаются строки такие 01ОД,123456 или 012№6,123456.
Задача состоит в том, чтобы из данного csv взять строки правильного формата, создать новый csv только с правильным содержимым. С первыми двумя вариантами справиться легко, достаточно сделать условие if(str.IndexOf("," ==4 && str.Lenght==11) - то эти варианты не попадают. Как сделать так, чтобы попадали строки в которых нет букв и символов, кроме ","?
Медленный, но короткий способ
Regex rx = new Regex(@"\d{4},\d{6}", RegexOptions.Compiled);
bool IsStringValidRegex(string str)
{
return rx.IsMatch(str);
}
Быстрый, но длинный
bool IsStringValid(string str)
{
int index = 0;
int digitsBefore = 0;
int digitsAfter = 0;
while (str.Length > index && char.IsDigit(str[index]))
{
digitsBefore++;
index ++;
}
if (str.Length <= index || str[index]!=',') return false;
index++;
while (str.Length > index && char.IsDigit(str[index]))
{
digitsAfter++;
index++;
}
return digitsBefore == 4 && digitsAfter == 6 && index == str.Length;
}
Как использовать
Console.WriteLine(IsStringValid("1234,123456"));
Console.WriteLine(IsStringValid("123,123456"));
Console.WriteLine(IsStringValid("1234,1234"));
Console.WriteLine(IsStringValid("01ОД,123456"));
Console.WriteLine(IsStringValid("012№6,123456"));
Console.WriteLine("---------------------------");
Console.WriteLine(IsStringValidRegex("1234,123456"));
Console.WriteLine(IsStringValidRegex("123,123456"));
Console.WriteLine(IsStringValidRegex("1234,1234"));
Console.WriteLine(IsStringValidRegex("01ОД,123456"));
Console.WriteLine(IsStringValidRegex("012№6,123456"));
Вывод:
True
False
False
False
False
-------------------------- -
True
False
False
False
False
Например, воспользоваться регулярным выражением: \d{4},\d{6} и натравить RegEx.IsMatch
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости