2009-12-29 3 views
1

J'expérimente avec C# w/a C++ background. J'ai joué avec des objets DateTime et je les trouve très utiles à ce jour, en particulier la fonction ParseExact()! En prenant l'idée de DateTime.ParseExact() un peu plus loin, je veux extraire le DateTime d'une chaîne (une entrée de journal) qui aura d'autres informations, avec des longueurs variables aux deux extrémités de l'information DateTime. Je crois que je peux accomplir ce dont j'ai besoin avec les expressions régulières, la sous-chaîne et ParseExact, mais j'espère une solution plus facile (tout comme la façon dont ParseExact s'est révélée être une alternative très simple à une méthode manuelle plus longue). Est-ce que quelqu'un a des suggestions?C# newbie - meilleure façon d'extraire DateTime à partir de l'entrée du journal en texte brut, convertir en DateTime

EDIT: Je n'ai aucun contrôle sur le format du journal et, bien que le format de la date et de l'heure dans le journal soit fixe, sa position ne l'est pas. Merci pour les commentaires! Je pense que je devrai probablement utiliser des expressions régulières!

+0

Quel est le format de l'entrée de journal? – SLaks

+0

Je pense qu'il est parfaitement logique d'utiliser une expression régulière pour saisir les informations pertinentes en tant que sections distinctes, puis de traiter chaque partie séparément. Vous pouvez utiliser 'ParseExact' sur le sous-masque capturé, comme vous l'avez dit. Cela devrait être quelques lignes au maximum - pourquoi auriez-vous besoin de quelque chose de plus? –

Répondre

2

ParseExact et ParseExact requièrent tous les deux une date réelle en paramètre.

Si vous connecter .: par exemple

20091229T213000 Something Something 

vous devez d'abord la date d'extrait (avec par exemple des sous-chaînes) et alors seulement vous pouvez analyser pour obtenir DateTime.

0

Vous n'avez pas besoin d'expressions régulières et de sous-chaînes. Si la date est dans une position fixe dans la chaîne, alors utiliser string.Substring est très simple et c'est la voie à suivre. Si vous devez identifier la position dans la chaîne, une expression régulière peut être le chemin à parcourir.

Dans les deux cas, vous devez d'abord extraire la chaîne de date avant de passer à ParseExact.

0

Si vous contrôlez le format du journal, vous pouvez écrire le format DateTime dans un format facile à analyser (par exemple, le délimiter avec une étiquette spécifique qui n'est pas utilisée ailleurs - par ex. [...]

Ensuite, il sera trivial d'extraire le texte pertinent (par exemple avec string.IndexOf ("[") et string.Substring()), puis de le lancer à DateTime.ParseExact().

0

Vous ne le trouverez pas dans la bibliothèque standard, mais si vous connaissez le format de date/heure ou le format d'enregistrement de journal, rien ne vous empêche de l'écrire vous-même.

Vous n'avez pas nécessairement besoin d'expressions régulières. Les enregistrements de journal sont souvent séparés par un espace, une tabulation,;, | ou un autre symbole et vous pouvez diviser chaque enregistrement en parties en utilisant string.Split, puis analyser la date en utilisant Parse ou ParseExact.