Показать полную графическую версию : преобразование формата даты в текстовом файле
Доброе время суток!
Столкнулся со следующей проблемой: в каталоге C:\ID находится порядка 30-40 txt файлов в них дата с форматом 31.12.1970, необходимо преобразовать в формат 1970-12-31 желательно во всех файлах разом.
в названии или в содержимом? если в содержимом какой формат строки?
порядка 30-40 txt файлов в них дата с форматом 31.12.1970 »
Упакуйте два-три таких файла в архив и выложите сюда или на RGhost.
Даты в содержимом файла.
http://forum.oszone.net/attachment.php?attachmentid=125303&stc=1&d=1431985654
Код PowerShell:
gci 'C:\ID\*.txt'|%{
sc $_ (gc $_|%{
($_.Split('\|')|%{
if(([Regex]::Match($_,'^[0-3]\d\.[01]\d\.[1-9]\d{3}$')).Success){
$_=(Get-Date $_ -Format 'yyyy-MM-dd')
};$_
}) -join '|' -replace '\|$'
})
}
.
PowerShell »
Спасибо большое! Все отработало в лучшем виде!
Georgio, а для чего Вы разбивали строки на составляющие по «.Split()»? Я не пойму цель этого.
Iska, да это первое, что в голову пришло: проверить составляющие на соответствие шаблону даты и заменить. А как бы Вы написали?
Я бы, наверное, сразу во всей строке делал замену, наподобие:
Get-ChildItem -Path 'C:\Мои проекты\05\ssp\*.txt' | ForEach-Object -Process {
Set-Content -Path $_ -Value (
Get-Content -Path $_ | ForEach-Object -Process {
$_ -replace '(\d{2})\.(\d{2})\.(\d{4})', '$3-$2-$1'
}
)
}
Если файлы не слишком большие — быстрее будет и вовсе обойтись без перебора отдельных строк.
greg zakharov
23-05-2015, 17:36
Как вариант можно использовать Select-String, например:sls ($r='(\d{2})\.(\d{2})\.(\d{4})') *.txt|%{$p,$s=$_.Path,$_.Line -replace $r, '$3-$2-$1';...}В переменную $p заносится путь до файла, в $s - измененная строка. Ну, а далее останется все это дело передать на запись.
Как вариант можно использовать Select-String »
Ежели токмо от автора будет подтверждение, что каждая строка обязательно содержит хотя бы одну дату, я так понимаю?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.