• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Цикл Do и For

  • Автор темы Fenomant
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Fenomant

Доброго времени суток. Использую VB2010

Код:
Public CONFIG(0 To 11, 0 To 1) As String
...
CONFIG(0, 0) = "ip"
CONFIG(0, 1) = "127.0.0.1"
CONFIG(1, 0) = "port"
CONFIG(1, 1) = "1000"
...

Код:
Public Sub ConfigRead()
FileOpen(1, "conf.ini", OpenMode.Input)
Do Until EOF(1)
PAKET_lbControlPaketSAVELIST.Items.Add("-------------------------") ' ListBox для проверки
For i As Integer = 0 To CONFIG.Length / 2 Step 1
If InStr(1, LineInput(1), CONFIG(i, 0)) Then
CONFIG(i, 1) = Mid(LineInput(1), CONFIG(i, 0).Length + 3)
Exit For
End If
Next i
Loop
FileClose(1)
End Sub

Вопрос:
Почему цикл DO (чтения из файла) выполняется только 1 раз, и только до цикла FOR?
 
H

hosm

проверьте, что такое CONFIG.Length / 2
мб, там ошибка

Добавлено: целочисленное деление, кста, вроде через \
 
F

Fenomant

проверьте, что такое CONFIG.Length / 2
мб, там ошибка
CONFIG - это глобальный массив типа String, объявление и заполнения которого показзано в первом учаске кода

Пробывал просто целое число указывать, цикл работает так же (т.е. один раз)

п.с. Содержимое файла conf.ini:

Код:
-----------------------------
*** Сетевые настройки FOH ***
-----------------------------
Адрес сервера
ip = 127.0.0.1

Порт на котором FOH будет принимать входящие подключения с клиента
port = 1080

Т.е. Суть процедуры такова:
1. Открываем файл, читаем с него построчно
2. Каждую строку сверям с CONFIG(i, 0)
где i - переменная цикла
3. Если искомая строка найденна, то в CONFIG(i, 1) заносим значения строки
 
F

Fenomant

Изменённая процедура отработала должным образом:

Код:
Public Sub ConfigRead()
Dim ii As Integer = 0
Dim buffer As String
FileOpen(1, "conf.ini", OpenMode.Input)
Do Until EOF(1)
buffer = LineInput(1)
For i = 0 To CONFIG.Length \ 2
If InStr(1, buffer, CONFIG(i, 0)) Then
CONFIG(i, 1) = Mid(buffer, CONFIG(i, 0).Length + 3)
Exit For
End If
Next i
Loop
FileClose(1)
End Sub

Подозреваю, что в старой процедуре, LineInput(1), каждый раз при вызове извлекала след. строку из файла => чтение из файла заканчивалось ещё в цикле FOR

Тему можно закрывать
 
H

hosm

ок, хорошо, что разобрались.
Dim ii As Integer = 0 зачем? наверно, там просто i
кстати, тему закрыть можете сами из меню Опции.
 
F

Fenomant

Dim ii As Integer = 0 зачем? наверно, там просто i
Это от экспериментов осталось :happy:

кстати, тему закрыть можете сами из меню Опции.
Хорошо

Не, где закрывать тему я невижу. В опциях только:
Подписка на тему
Сообщить другу
Версия для печати
Скачать тему
Подписка на этот форум
Режимы отображения
Переключить на: Древовидный
Стандартный
Переключить на: Линейный
 
H

hosm

должна быть самой верхней, перед подпиской. ок, я закрою.
оказывается, эта фишка отключена для группы Новенький, не знала.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!