Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173

Замена оператора IF на вызов метода

24.04.2012, 11:42. Показов 1246. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1)
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim line, pattern1 As String
    pattern1 = "Имя:"
            
     While Not EOF(1)
     Лист1.Cells(1, 1).Value = pattern1
               
        Line Input #1, line
        If Left(line, Len(pattern1)) = pattern1 Then
        Лист1.Cells(1, 2).Value = Right(line, Len(line) - Len(pattern1))
        End If
2)
Visual Basic
1
2
3
4
5
6
' Преобразование символов в числа, запись чисел в массив ArrNum.
For i = 1 To Len(v)
    If IsNumeric(Arr(i)) = True Then
        time = time & Arr(i)
        ArrNum(j) = Val(time)
        nmax = j
3)
Visual Basic
1
2
3
4
5
6
7
8
' Запись оставшихся чисел (не нулевых) в новый массив.
j = 1
For i = 1 To nmax
    If ArrNum(i) <> 0 Then
        ArrNumEnd(j) = ArrNum(i)
        j = j + 1
    End If
Next i
4)
Visual Basic
1
2
3
4
5
6
' Вывод результата.
For i = 1 To nmax
    If ArrNumEnd(i) <> 0 Then
        MsgBox ArrNumEnd(i)
    End If
Next i
Пример того как нужно сделать (конечный результат):
Цитата Сообщение от Alex77755 Посмотреть сообщение

Добавлено через 19 минут
Visual Basic
1
2
3
4
5
6
ListBox1.Clear
If ListBox1.ListCount = 0 Then
For I = 1 To Size
ListBox1.AddItem Лист1.Cells(I, 4).Value
Next
End If
Это идёт обновление списка.
Замени его одной строчкой

Visual Basic
1
ListBox1.RowSource = "D1:D" & Cells(Rows.Count, 4).End(xlUp).Row
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2012, 11:42
Ответы с готовыми решениями:

Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода
В базовом классе метод помечен как virtual. Насколько я понял из книги: override означает, что метод не утрачивает связи с базовым...

Вызов прегруженного оператора вывода в поток из аналогичного оператора
Программирую в c9.io с g++ получается тоже самое. Элементами стека(pointList) являются стеки(list) для которых уже определен оператор...

Вызов методов классов друг у друга (вызов метода из другого класса)
Есть несколько классов, которые могут вызывать методы (функции) друг у друга. Логика: класс1 имеет метод А, класс2 имеет метод Б, класс1...

8
24.04.2012, 12:35

Не по теме:

SAZl %-), что это было и о чём?

1
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
24.04.2012, 17:09  [ТС]
Если непонятно что-то по условию, задавайте вопросы!
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
24.04.2012, 23:49
Все же интересно. Что-то вроде такого:

4)
Visual Basic
1
msgbox replace(join(ArrNumEnd),"0","")
т.е. я понимаю, сделать аналог, но без использования операторов условия.

Но ведь у Вас примеры 1,2 не до конца дописаны - циклы не завершены.
1
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
25.04.2012, 09:00  [ТС]
Спасибо за #4, а #2 действительно недоделан (я исправлю), #1 еще раз разберу, хотя чего там нехватает, если есть начало/конец if.
0
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
26.04.2012, 18:31  [ТС]
Вот дополненный №2:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' Преобразование символов в числа, запись чисел в массив ArrNum.
For i = 1 To Len(v)
    If IsNumeric(Arr(i)) = True Then
        time = time & Arr(i)
        ArrNum(j) = Val(time)
        nmax = j
' Запись знаков операций в массив ArrSmb.
   Else
        ArrSmb(j) = Arr(i)
        j = j + 1
        time = " "
        smax = j
    End If
Next i
А насчет №1 я так и не понял что именно там не дописано, поэтому выкладываю все процедуру.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Private Sub CommandButton1_Click()
 
    Dim line, pattern1, pattern2, pattern3, pattern4, pattern5, pattern6, pattern7 As String
    pattern1 = "Имя ОС:"
    pattern2 = "Версия ОС:"
    pattern3 = "Изготовитель ОС:"
    pattern4 = "Имя системы:"
    pattern5 = "Тип:"
    pattern6 = "Процессор:"
    pattern7 = "Полный объем жесткого диска:"
    
    Open "d:/info.txt" For Input As 1
   
        
     While Not EOF(1)
     
     Лист1.Cells(1, 1).Value = pattern1
     Лист1.Cells(2, 1).Value = pattern2
     Лист1.Cells(3, 1).Value = pattern3
     Лист1.Cells(4, 1).Value = pattern4
     Лист1.Cells(5, 1).Value = pattern5
     Лист1.Cells(6, 1).Value = pattern6
     Лист1.Cells(7, 1).Value = pattern7
     
     
        Line Input #1, line
            
        If Left(line, Len(pattern1)) = pattern1 Then
        Лист1.Cells(1, 2).Value = Right(line, Len(line) - Len(pattern1))
        End If
        
        If Left(line, Len(pattern2)) = pattern2 Then
        Лист1.Cells(2, 2).Value = Right(line, Len(line) - Len(pattern2))
        End If
        
        If Left(line, Len(pattern3)) = pattern3 Then
        Лист1.Cells(3, 2).Value = Right(line, Len(line) - Len(pattern3))
        End If
        
        If Left(line, Len(pattern4)) = pattern4 Then
        Лист1.Cells(4, 2).Value = Right(line, Len(line) - Len(pattern4))
        End If
        
        If Left(line, Len(pattern5)) = pattern5 Then
        Лист1.Cells(5, 2).Value = Right(line, Len(line) - Len(pattern5))
        End If
        
        If Left(line, Len(pattern6)) = pattern6 Then
        Лист1.Cells(6, 2).Value = Right(line, Len(line) - Len(pattern6))
        End If
        
        If Left(line, Len(pattern7)) = pattern7 Then
        Лист1.Cells(7, 2).Value = Right(line, Len(line) - Len(pattern7))
        End If
        
    Wend
    Close #1
    n = n + 1
    ListBox1.Clear
    Dim i As Integer
    For i = 1 To n
    Set arr(i) = New Class1
    arr(i).One = "Имя ОС:  Microsoft Windows 7 Максимальная"
    ListBox1.AddItem Sheets(1).Cells(i, 1).Value
    ListBox1.AddItem Sheets(1).Cells(i, 2).Value
    Next i
    
End Sub
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
27.04.2012, 00:08
1) если формат файла info.txt заранее известен, то вообще незачем проверять данные. Обычный For
Если нет, то как-то через Split разве-что, но как узнать попало ли в него что-нибуть (нужен if), хотя можно через On Error. Но это изврат. Лучше уж Select case (но это опять аналог if).
Это такое учебное задание?

Добавлено через 14 минут
Использование переменных равнозвучных с операторами не к чему хорошему не приводит. Это я про Line.
Вроде как # (диез пропущен при открытии файла).

С такими условиями я как-то так бы написал:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub ee()
On Error Resume Next
Dim pattern(), n%, Stroka$
pattern = Array("Èìÿ ÎÑ:", "Âåðñèÿ ÎÑ:", "Èçãîòîâèòåëü ÎÑ:", "Èìÿ ñèñòåìû:", _
    "Òèï:", "Ïðîöåññîð:", "Ïîëíûé îáúåì æåñòêîãî äèñêà:")
Open "d:/info.txt" For Input As #1
  Do While Not EOF(1)
    Line Input #1, Stroka
    For n = 0 To UBound(pattern)
      Cells(n + 1, 2) = Split(Stroka, pattern(n))(1)
    Next
  Loop
Close #1
[A1].Resize(UBound(pattern) + 1) = Application.Transpose(pattern())
End Sub
1
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
27.04.2012, 10:30  [ТС]
Спасибо всем за помощь. По остальным №3 и №2 не нужно уже помогать.
Но у меня просьба ко всем: приведите несколько примеров (хотя бы 3) замены сложного IF на простые IF.
0
 Аватар для SAZl
2 / 9 / 0
Регистрация: 12.10.2011
Сообщений: 173
04.05.2012, 09:55  [ТС]
Тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2012, 09:55
Помогаю со студенческими работами здесь

Вызов метода, ожидающего завершение другого метода
Имеется процедура Proc. Я её вызываю в Button. Только вот программа, не дожидаясь завершения процедуры переходит к следующей строчке кода....

Вызов метода агрегата из метода агрегируемого класса
Есть класс-агрегат Game function Game() { this.game_map = null; // другие члены } Game.prototype.needToCall = function() {...

Вызов переменной метода из другого метода
class A(): def m(self): number = x #переменный параметр - номер заявки, определяется во время выполнения метода ...

Вызов переменной метода A из метода В
Добрый день. Подскажите как происходит вызов Например даны два класс А и В, в каждом классе есть Метод 1 и метод 2 class A { void...

Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса StateBar? class StateBar { public: ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru