Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > подстановка переменных вместо строки


Автор: wester 9.7.2010, 17:22
Доброго времени суток!
пишу программу и не очень понятно как можно реализовать следующее:
дана строка-регулярное выражение "b:\year\month\day\time" , необходимо как - то эту строку преобразовать к новому пути файла 
а именно, что бы получилось 
Код

@"b:\" + YearCreate + @"\" + MonthCreate + @"\" + DayCreate + @"\" + HourNMinuteCreate

по сути тоже самое как упорядовачивание файлов mp3 исходя из тегов.

почитал про рефлексию, но не очень понятно как, можно с помощью нее подставлять переменные при выполнении программы

Автор: KelTron 9.7.2010, 17:56
Чё то не пойму в чём проблема то...
Если переменные YearCreate, MonthCreate и тд это целые числа то просто преобразуешь в строку и всё
Код

@"b:\" + YearCreate.ToString() + @"\" + MonthCreate.ToString() + @"\" + DayCreate.ToString() + @"\" + HourNMinuteCreate.ToString()


Автор: wester 9.7.2010, 18:04
нет, по сути говоря хочу сделать программу которая упорядочивает файлы исходя из данных файла.
то есть пользователь задает маску перемещения, и программа разбирает эту маску и перемещает файл в соответствующую директорию
допустим если файл создан 7 июля 2010 года в 15:16 ,а маска "b:\year\month\day\time", то в программе должна получиться переменная ""b:\" + YearCreate + @"\" + MonthCreate + @"\" + DayCreate + @"\" + HourNMinuteCreate" где *Create - значения полученные из файла.

Автор: KelTron 9.7.2010, 18:12
Т.е. если пользователь задаст "b:\year\month\day\time", то на выходе получится "b:\2010\7\7\15:16",
если "b:\time\month\day\year", то "b:\15:16\7\7\2010"?
И каким образом может изменяться маска? Только перестановкой значений местами или ещё как то?

Автор: wester 9.7.2010, 18:17
KelTron, 
да именно так,
то есть пользователь может задать любую маску как типа "b:\month\year\date" или "b:\year\month\date"
и должен формироваться путь исходя из заданной маски

Автор: KelTron 9.7.2010, 18:32
Например, так:
Код

static void Main(string[] args)
{
    string mask = @"b:\time\month\day\year";
    string path = GetPath(mask, DateTime.Now);
}

private static string GetPath(string mask, DateTime createDate) 
{
    string[] vals = mask.Split(new char[]{'\\'});
    var path = new StringBuilder();
    path.Append(vals[0]);
    for (int i = 1; i < vals.Length; i++)
    {
        switch (vals[i])
        {
            case "year":
                path.Append(@"\" + createDate.Year.ToString());
                break;
            case "month":
                path.Append(@"\" + createDate.Month.ToString());
                break;
            case "day":
                path.Append(@"\" + createDate.Day.ToString());
                break;
            case "time":
                path.Append(@"\" + createDate.ToShortTimeString());
                break;
            default:
                break;
        }
    }

    return path.ToString();
}


Автор: wester 9.7.2010, 18:43
Спасибо! 
все работает!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)