Пользовательское форматирование, включая даты - PullRequest
0 голосов
/ 14 сентября 2010

В моем приложении я предоставляю пользователю возможность настроить имя создаваемого файла. Строка формата, которую читает программа, похожа на "yyyyMMdd-%1-%2-%3-%4", которую пользователь может настроить по своему вкусу.

В этом случае формат даты - yyyyMMdd, а %1 - это номер поездки, например, 1000P, %2 - это код источника, например, PTTTT, %3 - это код назначения, например, PHYUD, и * 1008. * - это дополнительный код остановки, например, YYYY123.

У меня проблемы с переносом фактических данных и форматированием в пользовательскую строку. Я считаю, что это формат даты, на которой я застреваю. Пока у меня есть

sOut = txtFormatPattern.Text
sOut = sOut.Replace("%1", "1000P")
sOut = sOut.Replace("%2", "PTTTT")
sOut = sOut.Replace("%3", "PHYUD")
sOut = sOut.Replace("%4", "YYYY123")

sOut = myDate.ToString(sOut) 'date is July 01, 2007

вывод «20070701- # 1000P-PTTTTP12YUD (YYYY123)» Проблема здесь, очевидно, в моем последнем обращении. Строка содержит ключевые символы, которые обозначают часть даты специально в PHYUD. Поэтому мой вопрос заключается в том, как я могу дать своим пользователям возможность форматировать выходные данные по своему усмотрению, а затем преобразовывать их должным образом?

* 1016 AGP *

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Вы можете использовать String.Format, чтобы делать то, что вы хотите. Каждый раздел внутри фигурных скобок является заполнителем для параметра, передаваемого функции.

При желании можно добавить двоеточие с другой строкой форматирования, определенной для параметра.

sOut = String.Format("{0:yyyyMMdd} {1} {2} {3} {4}", myDate, "1000P", "PTTTT", "PHYUD", "YYYY123")
0 голосов
/ 14 сентября 2010

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

'first replace the tokens by escaping the % character and number so that the
'date/time formatting ignores it
sOut = txtFormatPattern.Text
sOut = sOut.Replace("%1", "\%\1")
sOut = sOut.Replace("%2", "\%\2")
sOut = sOut.Replace("%3", "\%\3")
sOut = sOut.Replace("%4", "\%\4")

'now apply the date/time formatting as set by the user. the end result strips out
'the escape characters and ignores them for date/time formatting
sOut = myDate.ToString(sOut) 'date is July 01, 2007

'we should now have applied the date/time formatting and still have the original
'tokens so just replace
sOut = sOut.Replace("%1", "1000P")
sOut = sOut.Replace("%2", "PTTTT")
sOut = sOut.Replace("%3", "PHYUD")
sOut = sOut.Replace("%4", "YYYY123")

С помощью этой процедуры пользователь может установить строку форматирования как «yyyyMMdd-% 1-% 2-% 3-% 4», и полученный результат будет"20070701- # 1000P-PTTTT-PHYUD-YYYY123"

Это должно работать для любого варианта форматирования даты / времени, который пользователь может установить в параметрах, поскольку действительные токены всегда обозначаются% n.

agp

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