Показать полную графическую версию : [решено] Вставка диапазона дат в текстовый файл
Всем привет. Помогите реализовать следующий финт.
Есть текстовый файл.
VERSION 2
BITMAP 2,50 1,75 1,50 2,00 "Логотип.bmp"
TEXT 10 5,25 4,25 "Интервал исследования: 23.06.12 0:00 - 24.06.12 0:00" clBlack
TEXT 10 2,25 5,25 "Страна: Россия" clBlack
И вот как-бы так настроить чтобы менять дату автоматом, например при запуске скрипта 25.06.2012, чтобы он проставлял 25.06.12 0:00 - 26.06.12 0:00 и т.д.
Может кто помочь? Вероятно можно обойтись и без аутоит?
irk72ag, для начала укажите потребную кодировку текстового файла.
1251 вроде как. Я не большой спец. В обычном виндовом блокноте открывается. В просмотрщике от тотал коммандера кажет анси и 1251.
Пардон если кого насмешил своими познаниями. :)
madmasles
24-06-2012, 23:07
irk72ag,
Попробуйте примерно так.#include <Date.au3>
$sFile = @ScriptDir & '\test.txt'
$sReplace = @MDAY & '.' & @MON & '.' & StringRight(@YEAR, 2) & ' 0:00 - ' & StringRegExpReplace(_DateAdd('D', 1, @YEAR & '/' & @MON & '/' & @MDAY), '^\d{2}(\d{2})/(\d{2})/(\d{2}).*$', '$3.$2.$1 0:00')
$iCode = FileGetEncoding($sFile)
$hFile = FileOpen($sFile, $iCode)
If $hFile = -1 Then Exit -33
$sText = FileRead($hFile)
FileClose($hFile)
$sText = StringRegExpReplace($sText, '(?s)^(.*?)\d{2}\.\d{2}\.\d{2}\s0:00\s-\s\d{2}\.\d{2}\.\d{2}\s0:00(.*?)$', '${1}' & $sReplace & '$2')
If @extended <> 2 Then Exit -44
$hFile = FileOpen($sFile, $iCode + 2)
If $hFile = -1 Then Exit -55
FileWrite($hFile, $sText)
FileClose($hFile)
Спасибо! Работает. Сейчас буду адаптировать и применять на практике.
Наш девиз - меньше ненужных телодвижений. :)
Есть вопрос, как правильно прописать, если нужно менять дату не в одном файле а сразу в нескольких?
Я, конечно сделал по топорному, просто продублировав скрипт для второго файла, но может можно элегантнее?
И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 25.06.12, чтобы дата прописалась 24.06.12 0:00 - 25.06.12 0:00
madmasles
25-06-2012, 00:45
irk72ag,
Попробуйте так, особо не тестировал.#include <Date.au3>
Dim $aFileName[4] = [3, 'test.txt', '1_test.txt', '2_test.txt'], $sDir = @ScriptDir, $iOffsetDays = 5
For $i = 1 To $aFileName[0]
$iCode = FileGetEncoding($sDir & '\' & $aFileName[$i])
$hFile = FileOpen($sDir & '\' & $aFileName[$i], $iCode)
If $hFile = -1 Then ContinueLoop
$sText = FileRead($hFile)
FileClose($hFile)
_ReplaceDatePeriod($sText, $iOffsetDays)
If @error Then ContinueLoop
$hFile = FileOpen($sDir & '\' & $aFileName[$i], $iCode + 2)
If $hFile = -1 Then ContinueLoop
FileWrite($hFile, $sText)
FileClose($hFile)
Next
Func _ReplaceDatePeriod(ByRef $s_Text, $i_OffsetDays = 0)
Local $s_Start, $s_Start_1, $s_Replace
If Not StringRegExp($s_Text, '\d{2}\.\d{2}\.\d{2}\s0:00\s-\s\d{2}\.\d{2}\.\d{2}\s0:00') Then Return SetError(1)
$i_OffsetDays = Int($i_OffsetDays)
If $i_OffsetDays Then
$s_Start = _DateAdd('D', $i_OffsetDays, @YEAR & '/' & @MON & '/' & @MDAY)
$s_Start_1 = StringRegExpReplace($s_Start, '^\d{2}(\d{2})/(\d{2})/(\d{2}).*$', '$3.$2.$1 0:00 - ')
Else
$s_Start = @YEAR & '/' & @MON & '/' & @MDAY
$s_Start_1 = @MDAY & '.' & @MON & '.' & StringRight(@YEAR, 2) & ' 0:00 - '
EndIf
$s_Replace = $s_Start_1 & StringRegExpReplace(_DateAdd('D', 1, $s_Start), '^\d{2}(\d{2})/(\d{2})/(\d{2}).*$', '$3.$2.$1 0:00')
$s_Text = StringRegExpReplace($s_Text, '(?s)^(.*?)\d{2}\.\d{2}\.\d{2}\s0:00\s-\s\d{2}\.\d{2}\.\d{2}\s0:00(.*?)$', '${1}' & $s_Replace & '$2')
EndFunc ;==>_ReplaceDatePeriod
Как все сложно. :) Это вариант просто для нескольких файлов?
А что насчет:
И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 25.06.12, чтобы дата прописалась 24.06.12 0:00 - 25.06.12 0:00
ну т.е. как первый код, только для другого смещения дат.
madmasles
25-06-2012, 23:55
А что насчет: »$iOffsetDays = 5прибавит к сегодняшней дате 5 дней. Поменяйте на -3 - отнимет 3 дня.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.