Как найти дд / мм / гггг дату на строке с помощью C #? - PullRequest
0 голосов
/ 20 декабря 2011

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

Я помещаю все содержимое файла в строку и хочу заменить все даты форматом дд / мм / гггг (например, 19.12.2011) на фактическую дату (20.12.2011).


Как я могу это сделать?


Код на данный момент:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ReplaceDates
{
    class Program
    {
        static int Main(string[] args)
        {
            string FileIn = retreiveArgument(args, "i");
            int AddDays = Int32.Parse(retreiveArgument(args, "d"));
            string date = (System.DateTime.Now).AddDays(AddDays).ToString("dd/MM/yyyy");

            string content = "", date2replace = "";

            if (File.Exists(FileIn))
            {
                File.Copy(FileIn, FileIn + ".bkp", true);
                try
                {
                    content = File.ReadAllText(FileIn);

                    // here is what I need to do
                }
                catch (Exception)
                {
                    Console.WriteLine("Error replacing dates in " + FileIn + ".");
                    return 0;
                }
                try
                {
                    File.WriteAllText(FileIn, content);
                    Console.WriteLine("Dates replaced in " + FileIn + ".");
                    return 0;
                }
                catch (Exception)
                {
                    Console.WriteLine("Couldn't write the file " + FileIn);
                    return 2;
                }
            }
            else
            {
                Console.WriteLine("File " + FileIn + " does not exist.");
                return 1;
            }
        }



        private static string retreiveArgument(string[] argument, string argumentName)
        {
            for (int i = 0; i < argument.Length; i++)
            {
                if (argument[i].ToLower().Equals("-h") || argument[i].ToLower().Equals("help") || argument[i].ToLower().Equals("-help") || argument[i].Equals("?") || argument[i].Equals("-?"))
                {
                    Console.WriteLine("Usage : ");
                    Console.WriteLine("ReplaceDates.exe -i [Input File] -d [Addition]");
                    Console.WriteLine("[Input File] -> Complete path to the file.");
                    Console.WriteLine("[Addition] -> Adds the specified value in days to the actual date.");
                    Console.WriteLine();
                    Console.WriteLine("This executable replaces the data from the input file.");
                }
                else
                {
                    if (argument[i].Equals("-" + argumentName))
                    {
                        return argument[i + 1].Trim();
                    }
                }
            }
            return "";
        }
    }
}

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Вот решение с использованием MatchEvaluator. При желании настройте регулярное выражение;

string UpdateDates(string input)
{
    return Regex.Replace(input, @"\d{2}/\d{2}/\d{4}", m => DateTime.Now.ToString("dd/MM/yyyy"));
}
0 голосов
/ 20 декабря 2011

Используйте другой файл, который содержит макет исходного файла, но в датах, которые вам нужно заменить, вставьте другую строку, что-то вроде «ДД / ММ / ГГГГ».

Теперь вам просто нужно открытьфайл макета, прочитайте все содержимое, замените «ДД / ММ / ГГГГ» на желаемую дату и вуаля:)

0 голосов
/ 20 декабря 2011

для этого вы можете использовать регулярное выражение http://www.regular -expressions.info / date.html

...