Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Проверка кучи переменных в одном цикле
as-masterДата: Воскресенье, 10 Декабря 2006, 20:08 | Сообщение # 1
Группа: Удаленные





Есть штук 20 переменных с похожими именами, например string1$ ... string20$
Нужно проверить всех их на предмет, что они не пустые.
Но сделать это надо в цикле, типа:

For n=1 To 20
***
If (переменная='') Then
*** тогда то-то.
Else
*** тогда другое
End
Next n

Двадцать переменных можно и по одной проверить, а если их двести?
Нет, нужен цикл. И что-то не могу сообразить, не получается...

Пробовал писать всякие string[n]$ и string$[n], но программа упорно не понимает,
что имеются в виду переменные от string1$ до string20$.

Дурдом какой-то! Заработался я наверное...

 
VictorДата: Понедельник, 11 Декабря 2006, 00:11 | Сообщение # 2
MMB Club
Группа: Проверенные
Сообщений: 15
Репутация: 1
Награды: 0
Статус: Offline
Можно попробовать вместо string[n]$ или string$[n] написать 'string'+CHAR(n)

For n=1 To 20
text$='string'+CHAR(n)
If (text$='string10') Then
Message("text$","")
Else
End
Next n

 
as-masterДата: Понедельник, 11 Декабря 2006, 01:43 | Сообщение # 3
Группа: Удаленные





Quote (Victor)
Можно попробовать вместо string[n]$ или string$[n] написать 'string'+CHAR(n)

For n=1 To 20
text$='string'+CHAR(n)
If (text$='string10') Then
Message("text$","")
Else
End
Next n

В данном случае значение твоей переменной text$ и будет равно'string10',
и ничему другому!!! Ты же сам её к этому приравнял! А у меня значение этой
переменной может быть, к примеру,
'пошёл в задницу' :) А может быть и пустым.
Вот это я и должен проверить. А ты проверяешь то, к чему сам и приравниваешь :)

Добавлено (2006-12-11, 1:41 Am)
---------------------------------------------

Quote (Peter)
Нужно сначала подсчитать количество переменных в массиве, и для этого количества написать цикл! Что-то типа:

Количество переменных=GetArrayNum(Переменная$,#)
For i = 1 To Количество переменных
If (переменная='') Then
*** тогда то-то.
Else *** тогда другое
End
Next i

1. У меня НЕТ массива, а создавать его специально - это усложнение скрипта. Имхо.
2. Количество переменных мне и так заранее известно.
3. А нужно мне всего лишь - проверить, не пустые ли эти переменные.
И сделать это в цикле, чтобы скрипт короче был. По одной-то проверить их нетрудно :)

Добавлено (2006-12-11, 1:43 Am)
---------------------------------------------
Блин, решение должно по идее на поверхности лежать!!!

Сообщение отредактировал as-master - Понедельник, 11 Декабря 2006, 01:42
 
as-masterДата: Понедельник, 11 Декабря 2006, 12:47 | Сообщение # 4
Группа: Удаленные





Quote (Peter)
Я уже сказал, что предложенный мной вариант работает БЕЗОТКАЗНО! И это - всего лишь ВАРИАНТ!

Так в том-то всё и дело, что никакого варианта как такового НЕТ!!!
Мне нужен рабочий скрипт, а я его не увидел.

Добавлено (2006-12-11, 12:47 Pm)
---------------------------------------------
Еще раз уточняю поставленную задачу.
Имена переменных известны - это string1$, string2$ ... string20$

Вот так я их проверяю по одной:

If (string1$='') Then
Return()
End
If (string2$='') Then
Return()
End
If (string3$='') Then
Return()
End
If (string4$='') Then
Return()
End
If (string5$='') Then
Return()
End

... и так далее.

А нужно сделать это всё в одном цикле от 1 до 20.
Причем, писать в цикле строки типа:

string$ = 'string' + CHAR(i)

не получится, так как значение переменной string$ тогда и станет stringi,
а не тем значением, которое присвоено переменной в программе.
Вот в чём проблема-то.

Сообщение отредактировал as-master - Понедельник, 11 Декабря 2006, 12:30
 
YURIYДата: Понедельник, 11 Декабря 2006, 14:26 | Сообщение # 5
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
as-master, Пётр имел ввиду что в твоём примере ну НЕВЫГОДНО использовать 20 переменных, когда она будет одна и она будет массивом. Чем массив хуже, скажи мне? Для этого массивы и сделаны и ты их можешь в цикле перебирать! А что такое переменная?! Как ты будешь переменные перебирать? У меня такой идеи нет... Делай всё массивом. Ведь массивы для это и сделаны. А на Петра не наезжай, прав он smile

Вот так потом можешь проверить массивы на наличие пустых:

Code
For i=1 To 20
  If (string$[i]='') Then
   Message("Пусто!","")
  End
Next i

А присваивать твоему, допустим, значению string5$='Андрей' теперь надо так:

Code
string[5]$='Андрей'

И в чём разница между приведённым выше и string5$='Андрей' ? Длиннее на две скобки?

Думаю, доводов я тебе достаточно привёл, почему массивы ЛУЧШЕ, если одна переменная у тебя имеет несколько значений. Иначе ты поступаешь нерационально и глупо...

Удачи!



Вечная память Андрею Сергееву!
 
toizyДата: Понедельник, 11 Декабря 2006, 14:31 | Сообщение # 6
Группа: Удаленные





Только так:

Code
string$[1]='1a'
string$[2]='2a'
string$[3]='3a'
For c=1 To 3
Message("","string$[c]")
Next c

Quote (as-master)
У меня НЕТ массива, а создавать его специально - это усложнение скрипта. Имхо.
Разве маасив - это сложно? Зазыбай какой-нибудь исходник на Си...

Добавлено (2006-12-11, 2:31 Pm)
---------------------------------------------

Quote (as-master)
Пробовал писать всякие string[n]$ и string$[n], но программа упорно не понимает,
что имеются в виду переменные от string1$ до string20$.

Только сейчас заметил. Ты же пишешь string$[1], то есть элемент массива, а хочешь увидеть значение переменной string1$. Но ведь string1$ это не то же самое, что string$[1]!
 
as-masterДата: Понедельник, 11 Декабря 2006, 17:10 | Сообщение # 7
Группа: Удаленные





Юрию

Моя ошибка состояла в том, что я назвал переменные именами string1$ и так далее.
А надо было - string$[1]и так далее. Только и всего smile
Но только ты и смог мне это внятно объяснить. Чёрт возьми, я же знал это раньше!
Говорю же - заскок! Ведь даже применял в каком-то своем проекте (потом поищу).

И тогда переменные элементарно проверяются в цикле. Вот пример из моего проекта:

For n=1 To 20
If (string$[n]='') Then
** здесь моё действие
End
Next n

Это то, что и нужно было с самого начала! Просто я туплю иногда smile

PS. Писать string[n]$ - нельзя!!! Только string$[n].
Теперь всё полностью работоспособно. Можете брать и пользоваться.

toizy

То же самое, что я написал Юрию smile

 
  • Страница 1 из 1
  • 1
Поиск: