1 (изменено: xsanekk, 2012-11-13 18:55:59)

Тема: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

доброго времени суток.

подскажите пожалуйста как решить такую задачку... есть папка, в ней находятся несколько десятков файлов txt. Необходимо что бы скрипт сканировал все файлы в этой папке и проверял вторую строчку в каждом файле. Мы должны считывать только вторую строчку. Если во второй строчке 01 то ничего не делаем. Если в строчке 02 или больше (03 04 05) то выдаем сообщение на экран. И как сделать что бы сканировались файлы только те которые созданы сегодня(по системной дате)...

2

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Например, так - ищите примеры получения списка файлов из папки с помощью WSH-объекта FileSystemObject, потом циклом перечитываете аттрибуты каждого файла (примеры получения аттрибутов тоже найти не проблема) и, если расширение файла "txt", а дата модификации =сегодняшней, то - открываете файл, читаете построчно, на второй строке проверяете свое условие, закрываете, переходите к следующему файлу.

WBR. Roman

3 (изменено: xsanekk, 2012-11-16 17:02:02)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Вот так что ли? Не получается почему то дату получить системную...

Dim FSO, Folder, FilesCollection, sResult, TodayDate

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\777")
Set FilesCollection = Folder.Files
Set TodayDate = Now

For Each File in FilesCollection
	sResult = sResult & File.Name & vbTab
    sResult = sResult & File.DateCreated & vbCrLf
Next
		if File.DateCreated=TodayDate then
		' Вывод результата на экран
MsgBox(sResult)
		end if

4 (изменено: Rom5, 2012-11-15 01:55:30)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Вот, чуть подправленный Ваш скрипт:


Dim FSO, Folder, FilesCollection
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("C:\777")
Set FilesCollection = Folder.Files

Dim TodayDate : TodayDate = Now()

' MsgBox TodayDate ''' раскомментарьте для понимания получаемых значений
TodayDate = Left( TodayDate, 10) ' берем из текущей даты-времени "дд.мм.гггг чч:мм:сс" только дату - первые 10 символов
' MsgBox TodayDate

Dim sResult : sResult = "" 'Начальное значение накопительной переменной для результата'

For Each File in FilesCollection
	sDateOnly = Left(File.DateLastModified, 10) ' берем из даты измения файла "дд.мм.гггг чч:мм:сс" только дату
	if sDateOnly=TodayDate then
		sResult = sResult & File.Name & vbTab
		sResult = sResult & File.DateLastModified & vbCrLf
	end if
Next
' Вывод результата на экран
If Len(sResult)>0 Then
	' MsgBox(sResult)
	MsgBox "Найдены сегодняшние файлы:" & vbCrLf & vbCrLf & sResult, vbInformation, "Поиск в " & Folder
Else
	MsgBox "Сегодняшних файлов не найдено.", vbExclamation, "Поиск в " & Folder
End IF

1) функция "Now()" возвращает не только системную дату, но и время, а т.к. нам нужна для сравнения только дата, то берем для себя первые 10 символов слева, т.е. время отбрасываем;
2) аттрибут файла "дата создания" (.DateCreated) значение может вернуть скорее всего не то, что Вы ожидаете увидеть, поэтому лучше брать аттрибут "дата модификации" (.DateLastModified), а т.к. в этих аттрибутах также присутствует время, то тоже берем для сравнения только первые 10 символов.
3) накопление в результатирующей переменной (sResult) я сделал только по данным "сегодняшних" файлов, а до начала работы с этой переменной желательно определить ее значение как "", чтобы понимать, что в ней можно ожидать;
4) вывод результата произвожу в зависимости от наличия содержимого в накопительной переменной.

Теперь учитесь открывать текстовый файл на чтение и построчно читать его содержимое.

WBR. Roman

5 (изменено: xsanekk, 2012-11-15 12:08:19)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Спасибо  ROM5!

6 (изменено: xsanekk, 2012-11-16 17:02:19)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Dim FSO,F,TextStream,s,p 'Объявляем переменные
' Инициализируем константы
Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2, ReadLine = 2

' Создаем объект FileSystemObject
Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
' Создаем объект File для файла test1.txt
set F=FSO.GetFile("c:\777\test1.txt")
' Открываем файл для чтения
Set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault)
' Пропускаем первую строку и считываем 2 символа во 2й строке
p=TextStream.SkipLine
t=TextStream.Read(2)
' Закрываем файл 
TextStream.Close

if t>01 then
' Отображаем строку на экране
WScript.Echo "Код ошибки:" & vbCrLf & vbCrLf & t
end if

Теперь как сделать так что бы был перебор файлов... то есть искал бы цифру в нескльких файлах пришедших сегодня... понимаю нужен цикл и перебор файлов... но что то не соображу как...

7 (изменено: Rom5, 2012-11-15 17:54:36)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

xsanekk пишет:

Теперь как сделать так что бы был перебор файлов... то есть искал бы цифру в нескльких файлах пришедших сегодня... понимаю нужен цикл и перебор файлов... но что то не соображу как...

В предыдущем Вашем скрипте ведь и был цикл по файлам директории. В теле цикла формируете полное имя файла и используете для его открытия, например, так:


' [....... то, что до цикла]
For Each File in FilesCollection
    sDateOnly = Left(File.DateLastModified, 10)
    if sDateOnly=TodayDate then
        sResult = sResult & File.Name & vbTab
        sResult = sResult & File.DateLastModified & vbCrLf
        '--- готовимся к чтению файла
        sFullFileName = "c:\777" & "\" & File.Name ' путь к каталогу "c:\777" лучше обозначить один раз в некую переменную, чем повторять его явно
        set F=FSO.GetFile( sFullFileName )
        '[.... здесь Ваш код чтения файла]
    end if
Next

И оформляйте плз в постах свой код внутри специального тэга по кнопочке "Code".

Перед сравнением


t=TextStream.Read(2)
' [.....]
if t>01 then

думаю что нужно либо "t" привести к числовому виду, т.к. считанное значение скорее всего строковое, либо сравнивать не с чисолм 01, а со строкой "01".

WBR. Roman

8

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

xsanekk, обрати внимание на оформление кода и отредактируй свои посты.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

teadrinker пишет:

xsanekk, обрати внимание на оформление кода и отредактируй свои посты.

Сделал))

10 (изменено: xsanekk, 2012-11-16 19:16:40)

Re: VBS WSH. Чтение txt строк. Выполнение условия по значению в строке.

Вроде все))) Не должно а работает)))


Dim FSO, Folder, FilesCollection, sFullFileName, DirIZV

Dim TodayDate : TodayDate = Now()
TodayDate = Left( TodayDate, 10)

Dim sResult : sResult = ""

Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2, ReadLine = 2

DirIZV = "C:\777" ' Папка которую смотрим

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder( DirIZV )
Set FilesCollection = Folder.Files

For Each File in FilesCollection
    sDateOnly = Left(File.DateLastModified, 10)
    
if sDateOnly=TodayDate then
   sResult = sResult & File.Name & vbTab
  
	if Len(sResult)>0 Then
		sFullFileName = DirIZV & "\" & File.Name
			set F=FSO.GetFile( sFullFileName )
			set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault)
			p=TextStream.SkipLine
			t=TextStream.Read(2)
			TextStream.Close
		
		if t>01 then
			WScript.Echo "Файл: " & sFullFileName & vbCrLf & vbCrLf & "Код ошибки: " & t
		end if
	end if
end if
next