2010-09-13 5 views
0

Dans mon application, je présente à l'utilisateur une option permettant de personnaliser le nom du fichier généré. La chaîne de format que le programme lit est quelque chose comme "yyyyMMdd-%1-%2-%3-%4" que l'utilisateur peut personnaliser à son goût.Mise en forme personnalisée, y compris les dates

Dans ce cas, le format de la date est yyyyMMdd et le %1 est le numéro de voyage comme 1000P, %2 est le code d'origine comme PTTTT, %3 est le code de destination comme PHYUD et %4 est un code d'arrêt secondaire comme YYYY123.

Je rencontre des problèmes pour transférer les données et le formatage dans la chaîne personnalisée. Je crois que c'est le format de date sur lequel je suis coincé. Jusqu'à présent, j'ai

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 

la sortie est "20070701- # 1000P-PTTTTP12YUD (YYYY123)" Le problème est évidemment ici ma dernière conversion. La chaîne contient des caractères clés qui indiquent spécifiquement une partie de la date dans PHYUD. Donc, ma question est comment puis-je donner à mon utilisateur la possibilité de formater la sortie comme ils le souhaitent et ensuite convertir correctement?

agp

Répondre

0

Eh bien, je veux remplacer les jetons avec leur homologue comme indiqué plus haut, mais également inclure une certaine flexibilité pour les dates et heures. J'ai résolu ce en procédant comme suit:

'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") 

Avec cette routine, l'utilisateur peut définir la chaîne de mise en forme comme « yyyyMMdd-% 1% 2% 3% 4 » et la sortie résultante sera « 20070701 - # 1000P-PTTTT-PHYUD-YYYY123 "

Cela devrait fonctionner pour n'importe quelle variante de la mise en forme date/heure que l'utilisateur peut définir dans les options puisque les symboles valides sont toujours désignés par% n.

agp

+0

Veuillez éditer votre question originale pour ajouter des informations. Ce n'est pas un forum de discussion, donc nous ne "répondons pas au fil". –

+0

ne sais pas ce que cela signifie. J'ai ajouté autant d'informations que je pensais être nécessaire. Voulez-vous dire si j'ai trouvé la réponse pour l'ajouter à la question originale ou puis-je l'ajouter comme je l'ai fait ici? – sinDizzy

0

Vous pouvez utiliser String.Format pour faire ce que vous voulez. Chaque section à l'intérieur des accolades est un espace réservé pour un paramètre que vous passez à la fonction.

Facultativement, vous pouvez mettre un deux-points suivi d'une autre chaîne de formatage spécifique au paramètre.

sOut = String.Format("{0:yyyyMMdd} {1} {2} {3} {4}", myDate, "1000P", "PTTTT", "PHYUD", "YYYY123") 
+0

Merci pour le conseil. Je peux le faire si le format de la date est resté cohérent mais je crains que ce ne soit pas le cas. L'utilisateur peut choisir d'utiliser presque n'importe quel format. par exemple quelque chose comme yyyy-% 1-MM-% 2-dd (% 3). Votre conseil m'a cependant donné matière à réflexion. Merci. – sinDizzy