Что нового

[Данные, строки] проверка новых строк в файле

.me

Новичок
Сообщения
89
Репутация
1
Приветствую.
Поиском пользовался, но ничего не нашел(или искал плохо)
что нужно:
имеется файл, который изменяется раз в 5-15 минут, можно ли как то получить эти самые новые строки и отправить их POST на сервер, с учетом того, что каждая строка должна быть отправлена с уникальным id
пример:
в файле появились 4 новых строки вида
install:shok:k;data;data
install:no;data;data
install:shok:k;data;data
install:no;data;data
пост запрос должен быть следующим(для каждой новой строки):
Код:
$oRequest.Send(ukey(уникальный ид для каждой строки) & install:ok;data;data)

возможно ли такое?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
.me [?]
1. Откуда берётся id?

в файле появились 4 новых строки
2. Каждая следующая строка будет новой относительно предыдущей. Логично? Следовательно, нужен признак, который будет определять строку как новую.
Еще один вариант, это тупо сравнивать старый файл с новым и выделять новые строки. Далее старый файл переписывается с учётом новых строк и операция повторяется. Однако не факт, что строки не будут повторяться.

возможно ли такое?
Да.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Строки дописываются в конец файла или могут быть изменены существующие в любом месте ?
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
Garrett [?]
1. Откуда берётся id?
с ид вроде бы решил банально генерировать случайную фразу
Код:
#include <MsgBoxConstants.au3>
$pwd = ""
Dim $aSpace[3]
$digits = 15
For $i = 1 To $digits
    $aSpace[0] = Chr(Random(65, 90, 1)) ;A-Z
    $aSpace[1] = Chr(Random(97, 122, 1)) ;a-z
    $aSpace[2] = Chr(Random(48, 57, 1)) ;0-9
    $pwd &= $aSpace[Random(0, 2, 1)]
Next
;MsgBox($MB_SYSTEMMODAL, "1", $pwd, 10)


ra4o [?]
Строки дописываются в конец файла или могут быть изменены существующие в любом месте ?
строки дописываются исключительно в конец файла:
10:45
формат файла:
Код:
install:ok;data;data
install:no;data;data
install:ok;data;data
install:no;data;data
10:46
Код:
install:ok;data;data
install:no;data;data
install:ok;data;data
install:no;data;data
install:ok;data;data
install:no;data;data
install:no;data;data
install:error;data;data
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
.me [?]
строки дописываются исключительно в конец файла
Временная метка пишется в файл?
Если да, то ищем последнюю временную метку и забираем (до конца файла) строки.

Желательно прикрепить сам файл (данные можно изменить если обнародование нежелательно).
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
Файл который пишется во вложении.
Кроме информации которая в файле ничего не пишется, ид и тд, тк на программу которая пишет эту информацию я не могу никак повлиять(сторонняя)
 

Вложения

  • info1.txt
    338 байт · Просмотры: 7

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Попробуйте так.

RDC UDF - Мониторинг папок на предмет изменений

Код:
#Include <APIConstants.au3>
#include <RDC.au3>

HotKeySet('{ESC}', '_Exit')

Local $hFile = 0
Local $sDir = @ScriptDir &'\log' 		; директория файла
Local $sFileName = $sDir &'\info1.txt'	; путь к файлу
Local $iOffset = _FileGetPos($sFileName); ставим указатель в конец файла

_RDC_OpenDll()
If @Error Then
   Exit
EndIf

$iID = _RDC_Create($sDir, 1, $FILE_NOTIFY_CHANGE_SIZE)
If @Error Then
   Exit
EndIf
; следим за изменениями в файле
While 1

   If $iID = -1 Then
	  ContinueLoop
   EndIf

   $aData = _RDC_GetData($iID)
   If @Error Then
	  $iID = -1
	  ContinueLoop
   EndIf

   For $j = 1 To $aData[0][0]

	  $hFile = FileOpen($sFileName, 1)
	  If $hFile = -1 Then
		 MsgBox(16, "", "Error open file.")
		 Exit
	  EndIf

	  FileSetPos($hFile, $iOffset, $FILE_BEGIN)
	  $sData = FileRead($hFile)
	  ConsoleWrite('!Data: '& $sData & @CR)
	  ; Тут разбираем данные и отправляем.
	  ; $oRequest.Send(ukey(уникальный ид для каждой строки) & install:ok;data;data)
	  $iOffset = _FileGetPos($sFileName)
	  FileClose($hFile)
   Next

   Sleep(10)
WEnd


Func _FileGetPos($sFileName)

   Local $iPos = 0

   Local $hFile = FileOpen($sFileName, 1)
   If $hFile = -1 Then
	  MsgBox(16, "", "Error open file.")
	  Exit
   EndIf

   FileSetEnd($hFile)
   $iPos = FileGetPos($hFile)
   FileClose($hFile)

   Return $iPos
EndFunc ;==>_FileGetPos

Func _Exit()
   Exit
EndFunc ;==>_Exit
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
с ид вроде бы решил банально генерировать случайную фразу
Зачем усложнять ? Просто присваивайте каждой новой строке её номер по порядку .
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
Garrett
Код:
: error: FileSetEnd(): undefined function.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
.me
Последняя финальная версия AutoIt: 3.3.14.2 (Скачать)
 
Автор
M

.me

Новичок
Сообщения
89
Репутация
1
решено, спасибо в очередной раз Garrett'у
 
Верх