Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Вставка диапазона дат в текстовый файл (http://forum.oszone.net/showthread.php?t=237241)

irk72ag 24-06-2012 21:23 1939827

Вставка диапазона дат в текстовый файл
 
Всем привет. Помогите реализовать следующий финт.
Есть текстовый файл.

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 1939843

irk72ag, для начала укажите потребную кодировку текстового файла.

irk72ag 24-06-2012 22:50 1939865

1251 вроде как. Я не большой спец. В обычном виндовом блокноте открывается. В просмотрщике от тотал коммандера кажет анси и 1251.
Пардон если кого насмешил своими познаниями. :)

madmasles 24-06-2012 23:07 1939870

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 1939891

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

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

И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 25.06.12, чтобы дата прописалась 24.06.12 0:00 - 25.06.12 0:00

madmasles 25-06-2012 00:45 1939923

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 1940249

Как все сложно. :) Это вариант просто для нескольких файлов?

А что насчет:

И еще вопрос, если не трудно подскажите где и что подправить, если мне нужно будет получить другое смещение времени?
К примеру мне еще нужно при запуске 25.06.12, чтобы дата прописалась 24.06.12 0:00 - 25.06.12 0:00
ну т.е. как первый код, только для другого смещения дат.

madmasles 25-06-2012 23:55 1940465

Цитата:

Цитата irk72ag
А что насчет: »

Код:

$iOffsetDays = 5
прибавит к сегодняшней дате 5 дней. Поменяйте на -3 - отнимет 3 дня.


Время: 22:29.

Время: 22:29.
© OSzone.net 2001-