Получить определенную отформатированную строку из строки в C # или SQL Server - PullRequest
0 голосов
/ 11 января 2012

У меня есть имена файлов, такие как: abc 99 rep_DD_MM_YYYY_file_v-X.XX.zip, где DD_MM_YYYY - это дата, а X.XX - это версия.(например. abc 99 rep_01_01_2012_file_v-1.00).

Мне нужно сравнить в C # или SQL Server две строки:

  • abc 99 rep_DD_MM_YYYY_file_v-X.XX.zip
  • abc 99 rep_01_01_2012_file_v-1.00

извлекает значения позиций DD, MM, YYYY & XXX 2-й строки и затем размещает их в формате YYYYMMDDXXX, чтобы сравнить, какая из них является последнейодин.

Пожалуйста, кто-нибудь может предложить мне, как я могу сделать это сравнение в C # или T-SQL?

Ответы [ 4 ]

0 голосов
/ 17 января 2012

Положение « ДД », « ГГГГ / ГГ », « ММ / МММ » может отличаться. Поэтому мне нужен более сложный парсер дат.

Парсер, который я сейчас использую:

public void Main()
    {
        string name = "bmsa1110_v1.1.zip";
        string varPattern = "####YYMM##XXX####";

        getVarPart(name, varPattern);
    }

private string getVarPart(string name, string varPattern)
    {
        StringBuilder name_sb = new System.Text.StringBuilder(name);
        StringBuilder varPattern_sb = new System.Text.StringBuilder(varPattern);

        string YEAR = null;
        string MONTH = null;
        string DAY = null;
        string VERSION = null;

        for (int j = 0; j < varPattern_sb.Length; j++)
        {
            switch (varPattern_sb[j])
            {
                case 'Y':
                    YEAR = YEAR + name_sb[j];
                    name_sb[j] = '#';
                    break;
                case 'M':
                    MONTH = MONTH + name_sb[j];
                    name_sb[j] = '#';
                    break;
                case 'D':
                    DAY = DAY + name_sb[j];
                    name_sb[j] = '#';
                    break;
                case 'X':
                    VERSION = VERSION + name_sb[j];
                    name_sb[j] = '#';
                    break;
                default:
                    break;
            }
        }

        string varPart = YEAR + MONTH + DAY + VERSION;
        return varPart;
    }

Хотя, спасибо всем за ваш ответ. Если у вас есть предложения, пожалуйста, поделитесь ..

0 голосов
/ 11 января 2012

Это можно сделать с помощью регулярных выражений. Поскольку я действительно отстой с регулярным выражением, я предложу другой способ:

var day = fileName.SubString(11,2);
var month = fileName.SubString(14,2);
var year = fileName.SubString(17,4);
var version = fileName.SubString(29,4);

var result = String.Concat(year,month,day,version);
0 голосов
/ 11 января 2012
declare @filename varchar(50)
set @filename = 'abc 99 rep_01_01_2012_file_v-1.00'

declare @date varchar(10)
select @date = substring(@filename, 12, 10)
select @date

declare @xxx varchar(10)
select @xxx = replace(right(@filename,4),'.','')
select @xxx


select right(@date,4) + right(left(@date,5),2) + left(@date,2) + @xxx
0 голосов
/ 11 января 2012

Вам необходимо проанализировать DateTime из обеих строк с помощью DateTime.ParseExact

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...