Как изменить формат даты в текстовом файле? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть текстовый файл в формате:

04-01-2010 13:25
Lorem Ipsum...
03-28-2010 15:21
Lorem Ipsum...

и т.д.

И я хочу изменить формат даты так, чтобы он выглядел так:

2010-04-01 13:25
Lorem Ipsum...
2010-03-28 15:21
Lorem Ipsum...

и т.д.

Проблема в том, что я не могу передать регулярное выражение непосредственно в процесс, и я не уверен, как еще это сделать. И код, похоже, не записывает в файл вообще. Вот мой код:

def dateFix(dateLine)
    dateLine = dateLine.split('-')
    newDate = dateLine.slice(2), dateLine.slice(0), dateLine.slice(1)
    newDate = newDate.join('-')
end

@reg = /\b\d\d-\d\d-\d\d\d\d\b/

File.open('some_file.txt', "r+") { |file| 
    file.each_line { |line|
        date = line if line == @reg
        if date
            file.puts line.gsub(date, dateFix(date))
        end
    }
}

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Попробуйте это на:

require 'date'

INPUT_FILE = 'some_file.txt'
OLD_FILE   = 'some_file.old'
TEMP_FILE  = "some_file.#{ $$ }"

File.delete(OLD_FILE) if (File.exist?(OLD_FILE))

File.open(TEMP_FILE, 'w') do |fo|
  File.foreach(INPUT_FILE) do |li|
    li.chomp!
    if ( li[/^(\d{2}-\d{2}-\d{4} \S+)/] )
      fo.puts DateTime.strptime($1, '%m-%d-%Y %H:%M').strftime('%Y-%m-%d %H:%M')
    else
      fo.puts li
    end
  end
  File.rename(INPUT_FILE, OLD_FILE)
end

File.rename(TEMP_FILE, INPUT_FILE) if (File.exist?(OLD_FILE))

Это более похоже на Ruby и просто.

Будьте внимательны при каждой попытке чтения и записи в один и тот же файл. Любой сбой разрушит целостность вашего файла, поэтому лучше записать во временный файл, затем переименовать оригинал, когда вы успешно закончили чтение / запись, затем переместить оригинал в безопасное резервное копирование и переместить новый в. Таким образом, у вас все еще есть ваш источник и пункт назначения, что позволяет вам выполнять сортировку, если что-то пойдет не так.

3 голосов
/ 07 марта 2012

Сложно читать данные из файла и одновременно записывать в него данные. Я рекомендую прочитать файл a сразу, закрыть его, затем открыть его для записи и записи нового содержимого обратно в него. Обязательно сделайте резервную копию на случай, если что-то пойдет не так.

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