Что нового

Убрать и Поменять/Переместить данные в строке ?

kserg-2002

Новичок
Сообщения
18
Репутация
0
Подскажите, еще не пользовался регулярными выражениями, ну, думаю, всё это на них делать надо.
Значит, так: есть 2 файла.
Один лежит на FTP, получаю его дату и время в формате "2010/20/05 21:36:00"
Нужно разобрать эту строку для сравнения с данными второго файла.
Нужно привести к виду:
Дата = "20100520" (т.е. поменять местами "20" и "05" и убрать "/")
Время = "213600" (т.е. убрать ":").

Вообще в итоге я хочу сравнить 2 файла по дате-времени-размеру на FTP и в локальной папке. Одинаковые ли они? Если на FTP файл более новый, то скачать его.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Так пойдет?

Код:
$line = "2010/20/05 21:36:00"
$line = StringRegExpReplace($line, "(\d+)/(\d+)/(\d+)\s*(\d+):(\d+):(\d+)", "\1\3\2 \4\5\6")
ConsoleWrite($line)



Если нужно получить две переменные, тогда так:

Код:
Global $mat, $date, $time

$line = "2010/20/05 21:36:00"

$mat = StringRegExp($line, "(\d+)/(\d+)/(\d+)\s*(\d+):(\d+):(\d+)", 3)
if @error = 0 Then
	$date = $mat[0] & $mat[2] & $mat[1]
	$time = $mat[3] & $mat[4] & $mat[5]
EndIf

ConsoleWrite($date)
ConsoleWrite(@CRLF)
ConsoleWrite($time)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
kserg-2002, здесь вообще не нужны рег. выражения. Сравнение дат нужно производить с помощью _Date_Time_CompareFileTime().

Suppir сказал(а):
OffTopic:
Не забываем отмечать полезные сообщения
Больше так не делай. Это уже написано при создании темы большими красными буквами.
 
Автор
K

kserg-2002

Новичок
Сообщения
18
Репутация
0
Гхм. Я вначале сделал так:
StringTrim... - обрезал до пробела с двух сторон.
Затем StringSplit по "/" и ":", затем объединил.
Спасибо Всем!

Yashied, Вот только, вроде, с помощью _Date_Time_CompareFileTime нельзя определить разницу во времени между файлами. Возвращаемые значения только 0, 1, -1.

Suppir
Код:
$mat = StringRegExp($line, "(\d+)/(\d+)/(\d+)\s*(\d+):(\d+):(\d+)", 3)

Знак "+" в "(\d+)/" означает - продолжить до "/" ? То есть повтор "\d", насколько я помню?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
kserg-2002 сказал(а):
Yashied, Вот только, вроде, с помощью _Date_Time_CompareFileTime нельзя определить разницу во времени между файлами. Возвращаемые значения только 0, 1, -1.

Во-первых, судя по вопросу, такой задачи у тебе не стояло.

kserg-2002 сказал(а):
Вообще в итоге я хочу сравнить 2 файла по дате-времени-размеру на FTP и в локальной папке. Одинаковые ли они? Если на FTP файл более новый, то скачать его.

Во-вторых, с помощью рег. выражений ты этого тоже не зделаешь. И в-третьих, разница между $tagFILETIME структурами и есть разница во времени.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
kserg-2002 [?]
Знак "+" в "(\d+)/" означает - продолжить до "/" ? То есть повтор "\d", насколько я помню?

\d означает цифру
\d+ означает ряд из цифр (минимум должна быть хоть одна цифра)
\s* означает любое количество пробельных символов (минимум - ноль символов)
скобки означают, что мы берем результат в переменную

Если в регулярном выражении несколько скобок, то \1 означает первую скобку, \2 вторую и т.д.
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Код:
$filetime_on_computer = _GetNormalFormatFromFile("D:\new.rar") ; тут нужно указать расположение сравниваемого файла на компьютере
$filetime_on_ftp = _ConvertFtpFormatToNormal("2010/21/05 21:36:00") ; тут нужно указать дату файла, расположенного на фтп

If $filetime_on_ftp > $filetime_on_computer Then
    MsgBox(64,"Информация","На фтп лежит свежий файл")
EndIf

Func _ConvertFtpFormatToNormal($filetime)
    Local $days = StringMid($filetime,6,2)
    Local $month = StringMid($filetime,9,2)
    $filetime = StringReplace($filetime,6,$month)
    $filetime = StringReplace($filetime,9,$days)
    return $filetime
EndFunc

Func _GetNormalFormatFromFile($filepath)
	Local $a = FileGetTime($filepath,2,0)
	return StringFormat("%s/%s/%s %s:%s:%s",$a[0],$a[1],$a[2],$a[3],$a[4],$a[5])
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
kserg-2002 [?]
получаю его дату и время в формате "2010/20/05 21:36:00"
каким образом и зачем? лучше вытаскивать в формате 2010/05/20 21:36:00, а потом скармливать функции _DateDiff с ключом s
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kserg-2002
Можно еще так попробовать:
Код:
#include <Date.au3>

Dim $aMyDate
Dim $aMyTime
$sDateFTP = "2010/20/05 14:30"
_DateTimeSplit($sDateFTP, $aMyDate, $aMyTime)
$sString = $aMyDate[1] & StringFormat("%02d", $aMyDate[3]) & StringFormat("%02d", $aMyDate[2])
MsgBox(0, "", $sString)
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
madmasles у него в строке "2010/20/05 21:36:00" неправильно расположены месяц и день, их надо поменять местами
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kzru_hunter,
Так пусть kserg-2002 поменяет местами как ему надо. Я делал по вопросу в первом посте.
 
Автор
K

kserg-2002

Новичок
Сообщения
18
Репутация
0
Спасибо! Уж постараюсь сменить, как надо!
Теперь вопрос такой.
Создал архив, соответственно, у него время создания одно.
Затем заливаю на FTP - и пытаюсь его просмотреть - он говорит, что время другое уже.
Может, каким-то образом определённым время архива получить?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
kserg-2002 [?]
Затем заливаю на FTP - и пытаюсь его просмотреть - он говорит, что время другое уже.
может на сервере при копировании не переносятся атрибуты и в итоге время создания - это время копирования? проверь
 
Автор
K

kserg-2002

Новичок
Сообщения
18
Репутация
0
Да, похоже, как-то так получается.
Толком не знаю, что сделать...
 
Верх