Русское сообщество AutoIt

Общий раздел по AutoIt => Общие вопросы по AutoIt => Тема начата: Serega1383 от Апрель 13, 2018, 09:36:00

Название: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 13, 2018, 09:36:00
Как написать скрипт, такого плана. Есть текст такого вида.
01.01.2011
Класс. (постоянный текст во всех датах)
Рандомный текст.(текст напечатан вручную)

02.01.2011
Класс. (постоянный текст во всех датах)
Рандомный текст.(текст напечатан вручную)

И так далее

07.01.2011
Класс. (постоянный текст во всех датах)
Рандомный текст(может быть с датой 05.01.2011).

Нужно чтобы скрипт проверял дату, потом наличие текста и добавлял следующую дату. А самую первую удалил вместе с текстом, если она старше 6 дней текущей даты. Проблема, что в тексте тоже даты могут быть.

Чтобы получилось вот так.
Старше нынешней даты на 6 дней все удалить.
06.01.2011
Класс. (постоянный текст во всех датах)
Рандомный текст.(текст напечатан вручную)

07.01.2011
Класс. (постоянный текст во всех датах)
Рандомный текст.(текст напечатан вручную)

И тут скрипт добавил
08.01.2011 (сегодняшняя дата)
Класс. (постоянный текст во всех датах)
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 13, 2018, 12:41:23
Назовите файл Список.txt и закиньте скрипт в папку с файлом                                                                   
Код: AutoIt [Выделить]
#include <Array.au3>
#include <File.au3>
#include <Date.au3>

$aList = FileReadToArray(@ScriptDir & '/Список.txt')
For $i = UBound($aList) -1 To 0 Step -1
   If _IsDate($aList[$i]) Then
      If _DateDiff('d', StringRight($aList[$i], 4) & '/' & StringMid($aList[$i], 4, 2) & '/' & StringLeft($aList[$i], 2) & ' 00:00:00', _NowCalc()) > 6 Then
         Do
            _ArrayDelete($aList, $i)
         Until $i = UBound($aList) OR _IsDate($aList[$i]) OR UBound($aList) = 0
      EndIf
   EndIf
Next

_ArrayAdd($aList, "")
_ArrayAdd($aList, @MDAY & '.' & @MON & '.' & @YEAR)
_ArrayAdd($aList, "Класс. ")
_FileWriteFromArray(@ScriptDir & '/Список.txt', $aList)

Func _IsDate($sDate)
   Return ((StringLen($sDate) = 10) AND (StringRegExp($sDate, "(\d{2}\.\d{2}\.\d{4})") = 1))
EndFunc

Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 13:53:21
Выдаёт ошибку "If" statements must have a "Then"  keywords. :
If _DateDiff ('d',
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 16, 2018, 15:27:24
Похоже, вы скопировали не весь код.
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 17:05:02
С этой разобрался теперь выдает в самом начале. Unknown function name. :
$aList = FileReadToArray(@ScriptDir & '/123.txt')
$aList = ^ERROR
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 16, 2018, 17:21:04
Бывает такая проблема при копировании кода с форума, попробуйте вручную напечатать эту строчку и следующие где будет такая же ошибка
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 17:33:07
Все вручную печатал. Уже переписал не помогает
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: hedji от Апрель 16, 2018, 17:40:58
С этой разобрался теперь выдает в самом начале. Unknown function name. :
$aList = FileReadToArray(@ScriptDir & '/123.txt')
$aList = ^ERROR

В начале кода указаны инклюды? Файлы Array.au3, File.au3, Date.au3 есть в папке C:\Program Files (x86)\AutoIt3\Include ?

Код: AutoIt [Выделить]
#include <Array.au3>
#include <File.au3>
#include <Date.au3>
 


Функция пишется с нижнего подчеркивания:
Код: AutoIt [Выделить]
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 16, 2018, 17:47:56
Говорю же, проблема в том, что Scite не понимает само название функции. Именно такая функция без подчеркивания есть в Autoit, для ее работы не нужны инклюды. Просто надо перенабрать код вручную, например
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: hedji от Апрель 16, 2018, 17:50:32
А слэш случаем не в другую сторону должен быть? Винда же.
FileReadToArray(@ScriptDir & '/123.txt') vs FileReadToArray(@ScriptDir & '\123.txt')
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 18:09:03
Не помогает ни один из советов
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Tempo от Апрель 16, 2018, 18:49:09
Serega1383, какую версию AutoIt вы используете?
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 19:08:24
3.3.6.1. Новее поставить не смогу.
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Alofa от Апрель 16, 2018, 19:11:22
OffTopic
Вроде 3.3.6.1
Функция "FileReadToArray()" Появилась в v3.3.10.1


Добавлено: Апрель 16, 2018, 19:15:03
... Новее поставить не смогу.
Значит замените ее (функцию) на "_FileReadToArray()".
Код: AutoIt [Выделить]
; $aList = FileReadToArray(@ScriptDir & '/Список.txt')
Local $aList
_FileReadToArray(@ScriptDir & '/Список.txt', $aList)
 

Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 16, 2018, 21:07:57
Заработало. Но немножко делает не то, что надо.

Не удаляет дату с текстом старше 5 дней.

И в начале файла вписывает какие-то цифры рандомно.
Получается вот так.

21
04.04.2018
Класс.

А если много раз запустить, то вначале файла добавляет цифры
58
54
50
46
42
И ещё помогите реализовать.
Если к примеру надо добавить в несколько строк.
Пример.

Группа а. (название может быть любое.)
04.04.2018

Група б. (название может быть любое.)
04.04.2018
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 17, 2018, 09:16:31
Если используете функцию с подчеркиванием, то попробуйте такой код:
Код: AutoIt [Выделить]
#include <Array.au3>
#include <File.au3>
#include <Date.au3>

$iDaysCount = 6            ; Количество дней
Dim $aList[0]
_FileReadToArray(@ScriptDir & '\Список.txt', $aList)
If @error Then Exit 1
_ArrayDelete($aList, 0)

For $i = UBound($aList) -1 To 0 Step -1
   If _IsDate($aList[$i]) Then
      If _DateDiff('d', StringRight($aList[$i], 4) & '/' & StringMid($aList[$i], 4, 2) & '/' & StringLeft($aList[$i], 2) & ' 00:00:00', _NowCalc()) > $iDaysCount Then
         Do
            _ArrayDelete($aList, $i)
         Until $i = UBound($aList) OR _IsDate($aList[$i]) OR UBound($aList) = 0
      EndIf
   EndIf
Next

_ArrayAdd($aList, @CRLF & @MDAY & '.' & @MON & '.' & @YEAR & @CRLF & "Группа а. ")
_ArrayAdd($aList, @CRLF & @MDAY & '.' & @MON & '.' & @YEAR & @CRLF & "Группа б. ")
_FileWriteFromArray(@ScriptDir & '/Список.txt', $aList)

Func _IsDate($sDate)
   Return ((StringLen($sDate) = 10) AND (StringRegExp($sDate, "(\d{2}\.\d{2}\.\d{4})") = 1))
EndFunc

Если не работает, прикрепите ваш файл с датами
У вас в первом сообщении написано, что разница в датах должна быть больше 6 дней, а не 5. Добавил переменную в начале скрипта, можете изменять
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: Serega1383 от Апрель 18, 2018, 11:28:35
Выдаёт ошибку: array variable subscript badly formatted.
Dim $aList[0]
Dim $aList[^ ERROR
Название: Re: Помогите с проверкой текста и добавление даты
Отправлено: gunter123 от Апрель 18, 2018, 12:14:22
Замените эту строку на
Код: AutoIt [Выделить]
Local $aList