C #, подсчет блоков данных / частей в имени файла (маска). Пример Smith_John_1234_06202019.zip - PullRequest
0 голосов
/ 20 июня 2019

Проблема:
Мне нужен фрагмент кода, который пройдет через все файлы в папке и найдет поврежденные маски файлов.
Я в основном хочу получить счетчик для каждого фрагмента данных в каждой маске файла, и если маска файла НЕ возвращает 4 фрагмента данных (Last Name_First Name_Last4 SSN_Date of Hire), то я хочу переместить этот поврежденный файл вдругая папка.

Мне нужна только помощь:
Код, который «подсчитает» все фрагменты данных, разделенные подчеркиванием (_).

Я не могу просто получить количество символов, потому что очевидно, что имя и фамилия уникальны.Так что я думаю, мне придется подсчитывать каждый кусок данных.

Резюме:
Я создаю программу, которая исправит имена масок файлов для файлов .zip.Если эти zip-файлы не совпадают с приведенной ниже маской (имя) файла ТОЧНО, тогда они не могут быть обработаны через наши системы.

В названии должно быть 4 части данных в точном порядке.Каждый фрагмент данных ВСЕГДА делится на подчеркивание (_).

Маска файла Формат: Фамилия_First Name_Last4 SSN_Дата найма

Пример: Smith_John_1234_06202019

Как правило, проблему, которую мне нужно исправитьНапример, когда в маске файла отсутствует LAST 4 SSN, поэтому маска поврежденного файла будет выглядеть следующим образом: Smith_John__06202019

в маске файла (имя) отсутствует «1234».ОДНАКО, подчеркивание все еще там.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

@ Ответ Эрика почти правильный. @Derek пишет, что типичная проблема связана с отсутствием номера SSN, но, вероятно, ввод неправильный, если какой-либо элемент данных отсутствует или недействителен. Таким образом, изменение заключается в использовании + вместо * в регулярном выражении (и я предполагаю, что все файлы будут .zip).

if (Regex.IsMatch(fileNameWithExtension, @"^\w+_\w+_\d{4}_\d{8}\.zip$"))
{
    // OK
}
else
{
    // Not OK.
}
0 голосов
/ 20 июня 2019

Вы пытались использовать Regex?Этот код ниже решит вашу проблему.

string pattern = @"^[\w]*[_][\w]*[_][\d]{4}[_][\d]*[.]?[\w]*?$";
string input = "Smith_John_1234_06202019.zip";
Match m = Regex.Match(input, pattern);
if (m.Success)
    Console.WriteLine("OK");
else
    Console.WriteLine("Not OK");
...