|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Отработка данных при наличии ключевой цифры |
|
VBS/WSH/JS - Отработка данных при наличии ключевой цифры
|
Новый участник Сообщения: 42 |
Здравствуйте, форумчане!
Обращаюсь к Вам за помощью. Собрал скрипт VBS, всё отлично работает, но, есть небольшая загвоздка: так и не смог победить вот этот отрезок. Хочу, что бы он работал, только если в поле 9 стоит цифра 0 , а то он сейчас всё подряд гоняет. Подскажите, пожалуйста, какой командой можно это отрегулировать в этих полях? If aa(7) = "0.666000" Then aa(7) = "0.667000" & aa(7) End If If aa(7) = "0.166000" Then aa(7) = "0.167000" & aa(7) End If If aa(7) = "0.133000" Then aa(7) = "0.134000" & aa(7) End If If aa(7) = "0.083000" Then aa(7) = "0.084000" & aa(7) End If If aa(7) = "0.221000" Then aa(7) = "0.223000" & aa(7) End If If aa(7) = "0.222000" Then aa(7) = "0.223000" & aa(7) End If If aa(7) = "0.333000" Then aa(7) = "0.334000" & aa(7) End If If aa(7) = "0.332000" Then aa(7) = "0.334000" & aa(7) End If If aa(7) = "0.666000" Then aa(7) = "0.667000" & aa(7) End If If aa(7) = "0.142000" Then aa(7) = "0.143000" & aa(7) End If If aa(7) = "0.285000" Then aa(7) = "0.286000" & aa(7) End If If aa(7) = "0.284000" Then aa(7) = "0.286000" & aa(7) End If If aa(7) = "0.666000" Then aa(7) = "0.667000" & aa(7) End If If aa(7) = "0.428000" Then aa(7) = "0.429000" & aa(7) End If If aa(7) = "0.427000" Then aa(7) = "0.429000" & aa(7) End If If aa(7) = "0.498000" Then aa(7) = "0.501000" & aa(7) End If If aa(7) = "0.499000" Then aa(7) = "0.501000" & aa(7) End If |
|
Отправлено: 08:41, 02-09-2021 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Мне банально надо заменять эти значения, которые If aa(7) = "0.142000" Then в этих строках, на значения aa(7) = "0.143000" & aa(7) , но только при наличии в столбце 9 цифры 0
Т.е. 98;2100076544175;Сармат-мол;0;0;0.166000;;1;;0;;; 113;2100076594188;Форман-Лоп;0;0;0.142000;;1;;3;;; 116;2100076500005;Сократ-Бетон;0;0;0.166000;;1;;2;;; Т.е. в конце строки будут выглядить вот так: 98;2100076544175;Сармат-мол;0;0;0.167000;;1;;0;;; 113;2100076594188;Форман-Лоп;0;0;0.142000;;1;;3;;; 116;2100076500005;Сократ-Бетон;0;0;0.166000;;1;;2;;; Сейчас это выглядит в конце вот так: 98;2100076544175;Сармат-мол;0;0;0.167000;;1;;0;;; 113;2100076594188;Форман-Лоп;0;0;0.143000;;1;;3;;; 116;2100076500005;Сократ-Бетон;0;0;0.167000;;1;;2;;; |
Отправлено: 09:54, 02-09-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Чтобы не громоздить столько условий, может, есть какой-нибудь более общий принцип изменения значения?
|
------- Отправлено: 10:18, 02-09-2021 | #3 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Да нет, я всё думал, но это самый идеальный вариант. Т.е. можно легко силами девочки офис-менеджера добавить или убавить, ну или изменить))))
|
Отправлено: 10:33, 02-09-2021 | #4 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Может потому, что 0 у вас не в 9 столбце, а в 10? Некоторые условия у вас дублируются.
А некоторые можно совместить, т.к. конечные значение одинаковые. Привожу пример для Powershell (VBS не знаю) 98;2100076544175;Сармат-мол;0;0;0.166000;;1;;0;;; 113;2100076594188;Форман-Лоп;0;0;0.143000;;1;;3;;; 116;2100076500005;Сократ-Бетон;0;0;0.167000;;1;;2;;; 99;2100076544173;Аристотель-Арматура;0;0;0.285000;;1;;0;;; 97;2100076544174;Платон-Цемент;0;0;0.284000;;1;;0;;; $csv = Import-Csv "C:\temp\бетон.csv" -Encoding default -Delimiter ';' -Header 1,2,3,4,5,6,7,8,9,10,11,12 $csv |% { if ($_.10 -eq 0) { if ($_.6 -eq '0.166000') {$_.6 = "0.167000"} elseif ($_.6 -match '^0\.28[45]000') {$_.6 = "0.286000"} } } $csv 1 : 98 2 : 2100076544175 3 : Сармат-мол 4 : 0 5 : 0 6 : 0.167000 7 : 8 : 1 9 : 10 : 0 11 : 12 : 1 : 113 2 : 2100076594188 3 : Форман-Лоп 4 : 0 5 : 0 6 : 0.143000 7 : 8 : 1 9 : 10 : 3 11 : 12 : 1 : 116 2 : 2100076500005 3 : Сократ-Бетон 4 : 0 5 : 0 6 : 0.167000 7 : 8 : 1 9 : 10 : 2 11 : 12 : 1 : 99 2 : 2100076544173 3 : Аристотель-Арматура 4 : 0 5 : 0 6 : 0.286000 7 : 8 : 1 9 : 10 : 0 11 : 12 : 1 : 97 2 : 2100076544174 3 : Платон-Цемент 4 : 0 5 : 0 6 : 0.286000 7 : 8 : 1 9 : 10 : 0 11 : 12 : |
|
------- Отправлено: 10:57, 02-09-2021 | #5 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Да нет, все правильно, почему то в этом скрипте (vbs), у меня все поля на одно вправо сдвинулись.
Pwsh это хорошо, но у меня там скрипт на vbs |
Отправлено: 11:30, 02-09-2021 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Technik_spat, Если нумерацию полей начинать с 0, то изменяемое поле - это 5, а индикатор изменения - 9.
MRe = Array("0.083000", "0.084000", _ "0.133000", "0.134000", _ "0.142000", "0.143000", _ "0.166000", "0.167000", _ "0.221000", "0.223000", _ "0.222000", "0.223000", _ "0.284000", "0.286000", _ "0.285000", "0.286000", _ "0.332000", "0.334000", _ "0.333000", "0.334000", _ "0.427000", "0.429000", _ "0.428000", "0.429000", _ "0.498000", "0.501000", _ "0.499000", "0.501000", _ "0.666000", "0.667000") MsgBox ReStr("98;2100076544175;Сармат-мол;0;0;0.166000;;1;;0;;;", ";", 5, 9, MRe) MsgBox ReStr("113;2100076594188;Форман-Лоп;0;0;0.142000;;1;;3;;;", ";", 5, 9, MRe) MsgBox ReStr("116;2100076500005;Сократ-Бетон;0;0;0.166000;;1;;2;;;", ";", 5, 9, MRe) Function ReStr(s, d, ix, ii, Mas) a = Split(s, d) ReStr = s If a(ii) = "0" Then For i = LBound(Mas) To UBound(Mas) Step 2 If Mas(i) = a(ix) Then ReStr = RePlace(s, a(ix), Mas(i + 1)) Exit For End If Next End If End Function Более наглядный вариант
MRe = Array("0.083000", "0.084000", _ "0.133000", "0.134000", _ "0.142000", "0.143000", _ "0.166000", "0.167000", _ "0.221000", "0.223000", _ "0.222000", "0.223000", _ "0.284000", "0.286000", _ "0.285000", "0.286000", _ "0.332000", "0.334000", _ "0.333000", "0.334000", _ "0.427000", "0.429000", _ "0.428000", "0.429000", _ "0.498000", "0.501000", _ "0.499000", "0.501000", _ "0.666000", "0.667000") Dan = Array("98;2100076544175;Сармат-мол;0;0;0.166000;;1;;0;;;", _ "113;2100076594188;Форман-Лоп;0;0;0.142000;;1;;3;;;", _ "214;2100076594001;Фордзон-Путиловец;0;0;0.427000;;1;;0;;;", _ "215;2100076594002;Братья Райт;0;0;0.428000;;1;;0;;;", _ "216;2100076594003;Фсякая Фигня;0;0;0.666000;;1;;0;;;", _ "116;2100076500005;Сократ-Бетон;0;0;0.166000;;1;;2;;;") M = "" For j = LBound(Dan) To UBound(Dan) M = M + Dan(j) + vbCrLf + ReStr(Dan(j), ";", 5, 9, MRe) + vbCrLf + vbCrLf Next MsgBox M Function ReStr(s, d, ix, ii, Mas) a = Split(s, d) ReStr = s If a(ii) = "0" Then For i = LBound(Mas) To UBound(Mas) Step 2 If Mas(i) = a(ix) Then ReStr = RePlace(s, a(ix), Mas(i + 1)) Exit For End If Next End If End Function |
------- Последний раз редактировалось megaloman, 02-09-2021 в 12:26. Отправлено: 11:30, 02-09-2021 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2003/XP/2000 - Excel - Краш при вводе любой цифры в ячейку | DiamonDz | Microsoft Office (Word, Excel, Outlook и т.д.) | 22 | 23-03-2019 19:42 | |
[решено] Тормозит система при загрузке ОС при наличии Касперского и летает без него | A_kitten | Лечение систем от вредоносных программ | 4 | 04-09-2013 16:57 | |
Зависание при загрузке Windows 7 при наличии двух дисков (с одним - ОК) | sawabarton | Microsoft Windows 7 | 11 | 02-03-2013 22:49 | |
Windows Home Server лишилась ключевой особенности | OSZone News | Новости и события Microsoft | 0 | 26-11-2010 05:30 | |
Как понимать две цифры в ячейке Скорость передачи данных, Кбит/с? | united | Хочу все знать | 16 | 03-11-2008 01:21 |
|