![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
макроподстановки
IIL © (2002-02-08 08:51:00)Здравствуйте мастера! В FOXe есть понятие макроподстановки. Например если есть переменная I = "1" то к переменной B1 можно обратиться так B&I.
Есть ли что-нибудь подобное в DELPHI чтобы например объекты B1 B2 B3 и т.д. можно было бы создавать в цикле FOR I := 1 To ....
Иван Шихалев (2002-02-13 17:29:00) [1]> Все таки, я думаю суть вопроса в том,
> что в уже в ходе выполнения программы:
> в FOXе, можно формировать строки самой
> этой программы.
Это возможно только в интерпретаторе. Delphi - компилятор, что имеет свои (и серьезные) преимущества.
homa (2002-02-12 08:40:00) [2]>Romkin: Thanks!:)
>Digitman: Базы данных тут ни при чем. Не нравятся мои примеры - посмотри пример AlexanderK. От темы вопроса никаких отклонений нет. Если же ты в нее въехать не можешь или не хочешь - так ведь я ж тебя не принуждаю. Предлагаю перепалку закрыть.
AlexanderK (2002-02-11 12:59:00) [3]Все таки, я думаю суть вопроса в том, что в уже в ходе
выполнения программы: в FOXе, можно формировать строки самой
этой программы Например:
s="RUN arj.exe a a.arj *.*" && Формируем любую строку
&s && Выполняем
Решить можно конечно любую задачу, вопрос в удобстве решения
для тех кто решает.
Romkin (2002-02-11 11:16:00) [4]1. Берем TDatabase, ставим там PATH=... на каталог,
LANGDRIVER=... как надо, смотрим, чтобы в BDEADMIN Drivers->NAtive->dBase LEVEL был нужного уровня
2. Берем TTable, соединяем с Database
3. var DBList: TStrings;
DBList := TStringList.Create;
DataBase1.Connected := true;
После грузим имена таблиц:
DatabaseName - из Database1, Extensions -> true
Database1.Session.GetTableNames(const DatabaseName, Pattern: String; Extensions, SystemTables: Boolean; List: TStrings);
4.
for i := 0 to DBList.Count - 1 do
begin
Table1.Active := false;
Table1.TableName := DBList[i];
Table1.Active := true;
with Table1 do
for j := 0 to FieldCount - 1 do
begin
with Fields[i] do ....
end;
end;
PVOzerski (2002-02-11 10:53:00) [5]Вернемся к макроподстановкам. Во-первых, невзирая на более последовательно, чем в Си/Си++,
реализованный модульный подход и концепцию unit/uses, Борландовские и совместимые с ними
диалекты Паскаля не запрещают использовать и include-файлы, что позволяет реализовывать не
только макроподстановки, но даже шаблоны классов (подробнее - ищите на Королевстве Delphi),
хотя по сути это из разряда трюков. Во-вторых, Open-source-компилятор FreePascal поддерживает
также простенькие (беспараметрные) макроопределения, что в сочетании с перегружаемыми
функциями и операторами все равно дает немало дополнительных возможностей. Правда, у него
RAD пока нет, но написать DLL и вызывать из Delphi можно.
Digitman (2002-02-11 10:38:00) [6]>homa
Еще раз повторяю - заводи новую ветку в разделе "Базы данных" - это из той оперы. Ты рискуешь быть удаленным модератором за несоответствие вопроса тематике раздела
homa (2002-02-11 10:35:00) [7]Потому и спрашиваю, что еще не все знаю. Необъятен он, этот ваш Дельфи...:)
Basilio (2002-02-11 10:20:00) [8]А что мешает к DBF обращатся через BDE - там же есть метод
у таблиц:FieldByName(Name:String)
homa (2002-02-11 10:03:00) [9]Ладно, допустим мой пример неточен. Как его сделать в Дельфи я уже сам вижу. Давай возьмем другую ситуацию: несколько файлов *.dbf с неизвестной структурой. Требуется перебрать все файлы и все их поля, выполнив над каждым некую операцию, зависящую от типа поля. Имена полей заранее неизвестны, количество их неизвестно. Т.е. имеем случай когда объекты не "...подчиняются некоему заданному при кодировании правилу регулярности в однозначной их идентификации...". Я знаю, что структуру файла я получу - и количество полей, и их имена у меня будут. Вопрос: имея в строковой переменной имя объекта, как я могу к нему обратиться?
И, пожалуйста, избавь меня от уверений, что в Дельфи подобные средства есть. Лучше дай исходник - мы ж программисты, в конце концов...
Digitman (2002-02-11 10:00:00) [10]>>"..имена которых заранее неизвестны"
см. <Digitman> © (09.02.02 15:32)
homa (2002-02-11 09:34:00) [11]Цитирую автора вопроса:
"Есть ли что-нибудь подобное в DELPHI..."
"Задача состояла в том чтобы считать (например из INI) описания неизвесного количества таблиц..."
Не знаю как его, а меня не устраивает ответ "макроподстановок в Дельфи нет!", вопрос был не о их наличии, а о "чем-нибудь подобном" FOX-овским макроподстановкам. Мой же пример всего лишь иллюстрация к вопросу. Суть которого в том - как работать с объектами, имена которых заранее неизвестны?
Digitman (2002-02-09 15:32:00) [12]см. к примеру
метод TSession.GetTableNames()
метод TADOConnection.GetTableNames()
св-во TIBTable.TableNames
и т.п.
любой из этих вызовов безо всяких там "макроподстановок" решает 50% твоей задачи
Digitman (2002-02-09 15:31:00) [13]см. к примеру
метод TSession.GetTableNames()
метод TADOConnection.GetTableNames()
св-во TIBTable.TableNames
и т.п.
любой из этих вызовов безо всяких там "макроподстановок" решает 90% твоей задачи
Digitman (2002-02-09 12:53:00) [14]>homa
1. Где ты видишь, что я "подменяю" тему ?
2. Не вижу, что автора на сей момент хоть сколь либо интересует именно твой пример, так что собственный вопрос помещай в отдельную дискуссию - суть его вовсе не в макроподстановках как языковых возможностях той или иной среды, а в принципиальной возможности реализации конкретной целевой задачи, а именно :
<k>
- получить список табличных файлов БД, находящихся в заданной директории;
- определить размер списка;
- для каждой таблицы из полученного списка получить число записей в ней и вывести в некое окно в текстовом виде;
</k>
Не так ли ? И при чем же здесь "макроподстановка" как тема дискуссии ? Твоя задача - тривиальная задача, решаемая (и не менее удобно и эффектно) средствами тех же BDE и обычного Паскаля, и конкретные языковые особенности и возможности Делфи как среды здесь ни при чем.
Так что создавай новую ветку и вопрошай в ней на здоровье, как реализовать в Делфи-коде задачу, в действительности поставленную тобой (см.текст курсивом).
А на свой вопрос автор уже получил ответ :
Механизма макроопределений/макроподстановок в Делфи нет, потому что нет его в Паскале (и никогда не было, и вряд ли будет)
homa (2002-02-09 11:50:00) [15]Насколько я понимаю - и автора вопроса, и меня интересует именно как в Дельфи реализуется примерчик, описанный мной. Не придирайся к терминам, не подменяй тему - мы говорим о макроподстановках FOX"а, а не о классических макроподстановках языков компилирующего типа.
Digitman (2002-02-09 09:06:00) [16]>homa
Все это абсолютно реализуемо в Делфи ! Не в 7 строчек, правда. Но какое отношение данная задача имеет к механизму макроподстановок ?
homa (2002-02-08 23:50:00) [17]Не знаю что за INI, а вот такой примерчик вам не подойдет:
Dimen FileNames(1,4) &&
Kolich=adir(Filenames,"*.DBF") && Список файлов - в массив
For i=1 to Kolich
NAMEFILE = FileNames(i,1) && Первая колонка массива - имя файла
use &NAMEFILE
? reccount() && Печатаем количество записей
EndFor
И мне тоже интересно - как подобную операцию проделать в Delphi?
Digitman (2002-02-08 11:35:00) [18]И какие проблемы ? Все это вполне решаемо без всяких "макроподстановок" ! Приведи структуру INI
IIL (2002-02-08 11:08:00) [19]Задача состояла в том чтобы считать (например из INI) описания неизвесного количества таблиц и создать их и компоненты для работы с ними.
22606 (2002-02-08 10:44:00) [20]Если Вы имеете ввиду вычисления строки типа "a+b*(c+d)",
то для реализации этого механизма применяют парсеры.
Их написано очень много и Вы их легко найдете. (Пример для поиска в любом поисковике Delphi+Parser). Чтобы Вас не пугало незнакомое слово, парсер - это подпрограммка, которая разбирает Вашу символьную строку на состовляющие и производит необходимые действия - раскрывет скобки, делит, умножает и т.д. - все зависит от мощности парсера. Это может быть или функция или компонент - все зависит от реализации. Так-же как и производимые действия - простенькие (сложение, вычитание...) или сложные (тригонометрические ф-ции, факториалы, логарифмы...).