Проверка кучи переменных в одном цикле
|
|
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 переменных, когда она будет одна и она будет массивом. Чем массив хуже, скажи мне? Для этого массивы и сделаны и ты их можешь в цикле перебирать! А что такое переменная?! Как ты будешь переменные перебирать? У меня такой идеи нет... Делай всё массивом. Ведь массивы для это и сделаны. А на Петра не наезжай, прав он Вот так потом можешь проверить массивы на наличие пустых: Code | For i=1 To 20 If (string$[i]='') Then Message("Пусто!","") End Next i | А присваивать твоему, допустим, значению string5$='Андрей' теперь надо так: И в чём разница между приведённым выше и 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]и так далее. Только и всего Но только ты и смог мне это внятно объяснить. Чёрт возьми, я же знал это раньше! Говорю же - заскок! Ведь даже применял в каком-то своем проекте (потом поищу). И тогда переменные элементарно проверяются в цикле. Вот пример из моего проекта: For n=1 To 20 If (string$[n]='') Then ** здесь моё действие End Next n Это то, что и нужно было с самого начала! Просто я туплю иногда PS. Писать string[n]$ - нельзя!!! Только string$[n]. Теперь всё полностью работоспособно. Можете брать и пользоваться. toizy То же самое, что я написал Юрию
|
|
| |