Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
VBS

Пропустить пустой файл

19.01.2022, 07:56. Показов 3776. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех с праздиками.
Помогите пожалуйста с скриптом.
Есть скрипт, который читает данные из файла и ложит его в базу
Visual Basic
1
2
3
4
5
6
7
8
9
10
Function Potreblenie(arrayOps,  Potreblenie_Qual)
Const ForReading = 1
Link = arrayOps(2).Value    '.input
Set objFSO =CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(Link, ForReading)
 
strText = objTextFile.ReadAll
objTextFile.Close
Potreblenie = CDbl(strText)*2/1000
End Function
Проблема в том что попадаются пустые файлы. Как сделать, что бы при размере файла равным 0 скрипт не выполнялся?
Заранее спасибо.

Добавлено через 16 минут
Будет работать такое?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Function Potreblenie(arrayOps,  Potreblenie_Qual)
Const ForReading = 1
Link = arrayOps(2).Value    '.input
 Dim objFso
    Dim f
 
    Set objFso = CreateObject("Scripting.FileSystemObject")
 
    Set f = objFso.GetFile(Link)
if f.Size > 0 then
Set objTextFile = objFSO.OpenTextFile(Link, ForReading)
strText = objTextFile.ReadAll
objTextFile.Close
Potreblenie = CDbl(strText)*2/1000
End if
End Function
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2022, 07:56
Ответы с готовыми решениями:

Пропустить файл при рекурсивном переборе
Здрасьте, господа, у меня вопрос. Для очистки папки %TEMP% я давно юзаю такой вот, батник, который у вас тут и скопипастил: setlocal...

Подготовить командный файл, создающий новый пустой файл
Всем доброго вечера! Помогите реализовать :) Нужно подготовить командный файл, создающий новый пустой файл.(делается легко,а дальше я...

Переписать все положительные числа в пустой файл f, все отрицательные в пустой файл h
Вот задача:type rad = file of integer; Описать процедуру p(g,f,h) от трех файлов типа rаd, которая из файла g переписывает все...

39
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
20.01.2022, 16:35  [ТС]
Студворк — интернет-сервис помощи студентам
Подскажите, что Вы имеете в виду?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
20.01.2022, 16:40
Под чем?
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
20.01.2022, 16:46  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Под чем?
Верните второй параметр в функцию.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
20.01.2022, 17:01
Ну сравните оба моих варианта в первой строке. Это и был возврат параметра.
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
20.01.2022, 17:17  [ТС]
варианты различаются этим - Else Potreblenie = 0, но это не первая строка. и так и так при пустом файле возвращает 0
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
20.01.2022, 17:22
Цитата Сообщение от scals Посмотреть сообщение
варианты различаются этим
У вас со зрением как вообще? Используйте инструмент сравнения, если так всё плохо.
Цитата Сообщение от scals Посмотреть сообщение
но это не первая строка.
Я в курсе. Поэтому и написал до добавки Else.
Цитата Сообщение от scals Посмотреть сообщение
и так и так
Это мне о чём-то должно говорить?
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
20.01.2022, 17:34  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
У вас со зрением как вообще?
не жалуюсь
Цитата Сообщение от FlasherX Посмотреть сообщение
Поэтому и написал до добавки Else.
Где написали?
Цитата Сообщение от FlasherX Посмотреть сообщение
Это мне о чём-то должно говорить?
Ну например я бы понял что и первый и второй вариант. Раз мы говорим о сравнении двух вариантов.

Я уже писал что vbs не знаю. Занимаюсь другим и технический жаргон другой. Я не прошу разжовывать все по буквам(хотя не отказался бы), но можно элементарно не хамить?
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
20.01.2022, 17:49
Чтобы сравнить первую строку двух предоставленных мной кодов, знания vbs не требуются. Если вы в упор не хотите видеть очевидного, то как мне с вами ещё разговаривать?
Цитата Сообщение от FlasherX Посмотреть сообщение
Function Potreblenie(arrayOps)
Цитата Сообщение от FlasherX Посмотреть сообщение
Function Potreblenie(arrayOps, Potreblenie_Qual)

Цитата Сообщение от scals Посмотреть сообщение
Где написали?
>>>
Цитата Сообщение от FlasherX Посмотреть сообщение
Совет до добавки Else опять прошёл мимо глаз?

Цитата Сообщение от scals Посмотреть сообщение
Ну например я бы понял что и первый и второй вариант. Раз мы говорим о сравнении двух вариантов.
Мои первый и второй? Если первый было предложено исправить до публикации второго, то как минимум первый в исходном виде уже сравнивать глупо. А в контексте "варианты различаются этим" я вообще не понимаю, как можно верно ответить.
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
20.01.2022, 17:55  [ТС]
Спасибо. Теперь увидел и понял. Буду пробовать
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
20.01.2022, 19:37
scals, Если есть доступ к папке где лежат файлы, и есть возможность запускать скрипт до начала загрузки в Скада, можно попробовать вот такой скрипт:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
const wFolder = "G:\CYBER_FORUM\SKADA" 'папка, где лежат файлы для обработки
const ZeroLenthFolderName = "G:\CYBER_FORUM\SKADA\ZEROFILES" 'путь к УЖЕ СУЩЕСТВУЮЩЕЙ папке, куда переносить пустышки
const wExt = "*.txt" 'расширение файлов для обработки
Set wDir = CreateObject("Shell.Application").NameSpace(wFolder)
Set oFiles = wDir.Items 'список файлов
oFiles.Filter 64, wExt'выбираем только файлы с заданым расширением 
If oFiles.Count < 1 Then WSH.Quit 'если файлов в папке нет - на выход
Set zDir=CreateObject("Shell.Application").NameSpace(ZeroLenthFolderName) 'объект - папка куда переносить пустышки
for each ZF in oFiles 'перебираем файлы 
  if wDir.GetDetailsOf(ZF,1) = "0 байт" Then 'если размер вот такой
    zDir.MoveHere ZF, 4124 'перенесём файл в спецпапку
  end if
next
1. Файл сохранить в файл с расширением .vbs в кодировке Win-1251.
2. В константе wFolder прописать свой путь к папке, где лежат файлы
3. В константе ZeroLenthFolderName прописать путь к УЖЕ СУЩЕСТВУЮЩЕЙ папке, в которую переносить пустые файлы
4. В константе wExt прописать маску ваших файлов
5. Запускать простым тычком по файлу .vbs или по иконке на рабочем столе, привязанной к файлу.
6. Должен работать в любой винде, начиная с XP и на любом серваке.

Можно скрипт повесить и в шедулер, чтобы запускался в определённые моменты времени.
Тогда не потребуется искать что должна вернуть функция при пустом файле, если перед загрузкой запускать данный скрипт.
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
21.01.2022, 08:55  [ТС]
Доброе утро.
Попробовал, что Вы сказали.
Для верности покажу
Visual Basic
1
2
3
4
5
6
Function Potreblenie(arrayOps, Potreblenie_Qual)
  With CreateObject("Scripting.FileSystemObject").OpenTextFile(arrayOps(2).Value)
    If Not .AtEndOfStream Then Potreblenie = CDbl(.ReadAll)/500
    .Close
  End With
End Function
Правильно?
Результат: ошибок нет, но все равно перезатерает прошлое значение в 0.

По поводу переносить файла: если файл отсутствует в папке то скрипт извлечения из файла ругается не найден файл
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
21.01.2022, 09:11
Цитата Сообщение от scals Посмотреть сообщение
По поводу переносить файла: если файл отсутствует в папке то скрипт извлечения из файла ругается не найден файл
Просто попытки методом научного тыка найти значение, которое надо возвращать из функции - забава конечно интересная, но возможно имеет смысл поискать решение в руководстве по работе со скриптами в вашем варианте Скада, либо обратиться к разработчику.
1. Понятно же уже, что возврат нуля - не решение. Можно попробовать разобраться - что передаётся в других ячейках в том самом массиве, в котором вторым элементом идёт имя файла? Может там где-то есть и прежнее значение, которое можно возвращать вместо нуля, если файл пустой - тогда будет перезаписываться прежним значением и хоть в какой-то мере снимет напряжёнку.
2. Ведь как-то эти файлы сваливаются в данную папку, где их находит Скада? Откуда? Может можно вклиниться в поток копирования и там контролировать размеры поступающих файлов, отсеивая пустышки до того, как их имена попадут в перечень файлов на обработку?
3. Ну подумайте сами, где помимо данной функции можно проконтролировать до того, как скада начнёт запускать скрипт с перечислением всех файлов, в том числе и пустых? И ищите решение там, а не в этой функции. В ней решение может быть только в том случае, если разработчик предусмотрел возможность возврата какого-то значения, которое будет командой не записывать его в базу. И, если вы узнаете каким-то образом какое это значение. В противном случае решения в рамках этой функции - НЕТ!
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
21.01.2022, 09:15
Цитата Сообщение от scals Посмотреть сообщение
но все равно перезатерает прошлое значение в 0.
Значит, нужен какой-то обработчик скады, который скажет, что в случае пустого значения ничего переписывать не надо.
Иначе можно переписывать прежним значением. Знаете, как его получить?
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
21.01.2022, 09:22  [ТС]
спасибо. буду думать.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
21.01.2022, 09:26
Цитата Сообщение от Punkt5 Посмотреть сообщение
1. Понятно же уже, что возврат нуля - не решение.
Там не нуль, а пусто.
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
21.01.2022, 12:04  [ТС]
В доке по скриптам скады вроде нашел парамметр который читает текущее значение GetObjectValuesByPath Method.
Страница 21. Можете глянуть? и как его вставить в скрипт?
файл загрузил на сайт https://www.cyberforum.ru/atta... 1642755778
Вложения
Тип файла: pdf PG-SCADA-EN.pdf (1.49 Мб, 15 просмотров)
0
0 / 0 / 0
Регистрация: 29.06.2017
Сообщений: 24
21.01.2022, 12:26  [ТС]
Не тот файл положил
Вложения
Тип файла: pdf PG-SDK-EN Application Programming Interface.pdf (2.79 Мб, 9 просмотров)
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
21.01.2022, 14:22
Цитата Сообщение от scals Посмотреть сообщение
и как его вставить в скрипт?
Без понятия. Может, как метод (без скобок) с возвращаемым значением в 4 параметре. Может, как функцию с 3 параметрами, источники которых тоже надо понимать. Тут надо знать все этапы взаимодействия с интерфейсом скады. Снизу 39 страницы пример вызова через nsclient. Но мне это, увы, вообще ни о чём не говорит.
0
малоболт
1328 / 510 / 213
Регистрация: 30.01.2020
Сообщений: 1,244
21.01.2022, 18:32
Цитата Сообщение от scals Посмотреть сообщение
В доке по скриптам скады вроде нашел парамметр который читает текущее значение GetObjectValuesByPath Method.
В данном случае он не поможет. Повторяю в сотый раз: Функция ДОЛЖНА ВЕРНУТЬ результат.
dixi
Самое простое - не привязываться к скада, а пытаться перехватывать файлы до того, как они попали в папку, где их увидеа скада и начала обработку.
Это доступно вам? Вы видите эту папку? Или вы сами туда кладёте файлы, или имеете доступ к серверу, на котором исполняются скрипты, собирающие эти файлы от разных потребителей, или ещё каким-то образом можете влезть в поток формирования и передачи этих файлов? Да-Нет-Пока не знаю, надо посоветоваться с админом?
Вклиниться до скады - будет самым оптимальным.

Если всё же не получается - нужно понять, в какое место вкрячен вызов вашего скрипта? Судя по описаниям - там до фигища мест, в которые можно вписаться. Но нужен хотя бы скриншот - где оно стоит, и если это таймер - с какой периодичностью?
С какими параметрами этот скрипт включен в скада? Там есть параметр СценарийВарианты - может надо просто включить этот параметр в месте вызова данного скрипта, и разобраться и прописать вариант с нулевым размером не в самом скрипте, а на уровне описания вызова в самой скаде, раз уж там есть такой параметр.
0
7690 / 2887 / 1110
Регистрация: 06.06.2017
Сообщений: 9,816
22.01.2022, 09:49
Цитата Сообщение от Punkt5 Посмотреть сообщение
В данном случае он не поможет. Повторяю в сотый раз: Функция ДОЛЖНА ВЕРНУТЬ результат.
Так она и вернёт в случае считывания и присвоения нужного значения через Else Potreblenie = значение. В чём проблема? Я же не просто так написал:
Цитата Сообщение от FlasherX Посмотреть сообщение
Иначе можно переписывать прежним значением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2022, 09:49

Как пропустить первый файл в директории?
Первый файл там же ссылка на папку родителя? Есть ли какие-то атрибуты или что-то ещё, чтобы определить эту ссылку? Можно конечно и...

Пропустить\не пропустить при слиянии
Здравствуйте! Такое дело: выполняю слияние двух документов. Все вроде бы хорошо, да вот только нужно сделать так, чтобы абитуриентов в...

Создать пустой бинарный файл, открыть существующий файл, добавить в него 20 действительных чисел
Создать пустой бинарный файл, открыть существующий файл, добавить в него 20 действительных чисел, записать последнее число между 5-м и 6-м...

Почему не создаётся файл и не производится запись в пустой файл?
Помогите разобраться почему не создаётся файл и не производится запись в пустой файл, в дебагере вроде как всё нормально, указатели и...

Переписывающую строки в файл дополняя справа пробелами или ограничивая до n символов, пустые пропустить
Создать программу, переписывающую в текстовый файл g содержимое файла f, исключая пустые строки, а остальные дополнить справа пробелами или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru