Что нового

[Автоматизация] Чтение файла с данными и напоминание о событии

ulan44

Знающий
Сообщения
55
Репутация
8
Версия AutoIt: 3.

Описание:
Есть файл с датами рождениями и ФИО типа
21.01.1980 Пупкин Вася Васильевич
10.09.1985 Васильев Коля Владимирович
11.04.1991 Путин Владимир Медведьевич
и т.д.
Примечания:
Надо чтоб сравнивались даты с текущей и с той что в файле, допустим сегодня 10.09 она ищит в файле дату и пишет сообщение.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: [Автоматизация] Чтение файла с датами.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] Чтение файла с датами." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Попробуй так:
Код:
$FilRead = FileRead(@ScriptDir & '\test.txt')
$Lines = StringSplit($FilRead, @CRLF)
For $i = 1 To $Lines[0]
    If $Lines[$i] <> '' Then
        $Reg = StringRegExp($Lines[$i], '\d{2}\.\d{2}\.\d{4}', 3)
        If $Reg[0] = @MDAY & '.' & @MON & '.' & @YEAR Then MsgBox(0, '', $Lines[$i])
    EndIf
Next

или так:
Код:
#include <File.au3>

Global $File = @ScriptDir & '\test.txt'

$Lines = _FileCountLines($File)
For $i = 1 To $Lines
	$String = FileReadLine($File, $i)
	If $String <> '' Then
		$Reg = StringRegExp($String, '\d{2}\.\d{2}\.\d{4}', 3)
		If $Reg[0] = @MDAY & '.' & @MON & '.' & @YEAR Then MsgBox(0, '', $String)
	EndIf
Next
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
Я наверно не много не так выразился.... надо чтоб писала сообщение что типа сегодня допустим 10.09 у Васильев Коля Владимирович день варенья или какое то другое событие которое описано в файле.
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Так ?:
Код:
#include <File.au3>

Global $File = @ScriptDir & '\test.txt'

$Lines = _FileCountLines($File)
For $i = 1 To $Lines
    $String = FileReadLine($File, $i)
    If $String <> '' Then
        $Reg = StringRegExp($String, '\d{2}\.\d{2}\.\d{4}', 3)
        If $Reg[0] = @MDAY & '.' & @MON & '.' & @YEAR Then
			$RegExp = StringRegExpReplace($String, '\d{2}\.\d{2}\.\d{4}(.*?)\h+', '')
			MsgBox(0, 'Test', 'Сегодня у ' & $RegExp & ' день рождения !')
		EndIf
    EndIf
Next
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
Спасибо. А я уже начал тоже писать только немного по другому.
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
В последнем решении с файла все прекрасно берет и дату и ФИО но немного не правильно.
Надо чтоб сравнивалось дата месяц, а у вас сравнивает и дату и месяц и год.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ulan44,
Попробуйте так.
Код:
$sBD = _BirthdaysToDay()
If @error Then Exit -33
MsgBox(64, 'Info', $sBD)

Func _BirthdaysToDay($i_Lang = 0)
	Local $s_File = @ScriptDir & '\birthdays.txt', $h_File, $s_Text, _
			$s_Pattern = '^' & @MDAY & '\.' & @MON & '\.', $s_Message, _
			$a_Lang[2][2] = [['Сегодня день рождения', 'Today birthday'], _
			['Сегодня нет дней рождения', 'No birthdays today']]
	$i_Lang = Abs(Int($i_Lang))
	If $i_Lang > 1 Then $i_Lang = 0
	$h_File = FileOpen($s_File, 0)
	If $h_File = -1 Then Return SetError(1)
	While 1
		$s_Text = FileReadLine($h_File)
		If @error Then ExitLoop
		If StringRegExp($s_Text, $s_Pattern) Then
			$s_Message &= StringFormat($a_Lang[0][$i_Lang] & ': %s (%d)', _
					StringRegExpReplace($s_Text, $s_Pattern & '\d{4}\s+', ''), _
					@YEAR - StringRegExpReplace($s_Text, $s_Pattern & '(\d{4})\D.*', '$1')) & @LF
		EndIf
		Sleep(2)
	WEnd
	If Not $s_Message Then Return $a_Lang[1][$i_Lang]
	Return StringTrimRight($s_Message, 1)
EndFunc   ;==>_BirthdaysToDay
 
Верх