C # синтаксический анализ текстовых файлов, ЕСЛИ формат имени желаемого - PullRequest
2 голосов
/ 29 мая 2010

ОК, у меня есть текстовые файлы, которые я анализирую и сохраняю в sql db. Имена отформатированы как

R306025COMP_272A4075_20090929_080159.txt

Однако, есть несколько избранных (из тысяч файлов) с именами, которые отформатированы по-разному (особенно файлы, которые были сгенерированы как тесты), пример

R306025COMP_SU2_TestBottom_20090915_101441.txt

Причина, по которой у меня возникает проблема, заключается в том, что я использую Split('_')[1,2,etc] для извлечения числа R, части 272A4075 и части 20090929 (дата). Когда приложение встречает файлы со странными именами, оно завершается сбоем, потому что оно пытается проанализировать «TestBottom» как дату и вставляет «SU2» вместо номера 272.

По сути, я хочу, чтобы приложение распознавало, что если имя файла не отформатировано, как в моем первом примере, пропустите его. Любой совет?

Ответы [ 3 ]

2 голосов
/ 29 мая 2010

Можете ли вы просто сделать следующее на основе разделения:

string[] parsedLine = yourData.Split('_');
string theR = parsedLine[0];
string theCode = parsedLine[1];
string theDatePart = (parsedLine.Length > 4) ? parsedLine[3] : parsedLine[2];

Если вы хотите просто пропустить это, просто сделайте плохие строки:

string[] parsedLine = yourData.Split('_');
if (parsedLine.Length > 4) continue;  // assuming your looping

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

1 голос
/ 29 мая 2010

Используйте регулярное выражение в имени файла, что означает, что оно будет соответствовать регулярному выражению в любом месте имени файла (поэтому вам не нужно беспокоиться о том, где именно в строке оно встречается, и точный результат извлекается для вы). Затем, если вам не удалось найти требуемые совпадения, пропустите файл (исключений не создается, вы просто ничего не получите в своем объекте Matches).

Я бы сделал тебе пример, но сейчас у меня нет VS. Regex работает в пространстве имен System.Text.RegularExpressions.

1 голос
/ 29 мая 2010
foreach (var fileName in fileNames) {
    if (fileName.Count(c => c == '_') != 3) continue;
    // etc...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...