Войти

Показать полную графическую версию : [решено] Вставка диапазона дат в текстовый файл


irk72ag
24-06-2012, 21:23
Всем привет. Помогите реализовать следующий финт.
Есть текстовый файл.

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 и т.д.

Может кто помочь? Вероятно можно обойтись и без аутоит?

Iska
24-06-2012, 22:04
irk72ag, для начала укажите потребную кодировку текстового файла.

irk72ag
24-06-2012, 22:50
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)

irk72ag
24-06-2012, 23:50
Спасибо! Работает. Сейчас буду адаптировать и применять на практике.
Наш девиз - меньше ненужных телодвижений. :)

Есть вопрос, как правильно прописать, если нужно менять дату не в одном файле а сразу в нескольких?
Я, конечно сделал по топорному, просто продублировав скрипт для второго файла, но может можно элегантнее?

И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 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

irk72ag
25-06-2012, 16:01
Как все сложно. :) Это вариант просто для нескольких файлов?

А что насчет:

И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 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