请问诸位大侠, 在Delphi5 中如何实现FoxBase中的宏代换(&)功能? 急急急!!!!!!!!(50分)

  • 主题发起人 主题发起人 txytlc
  • 开始时间 开始时间
Delphi(Pascal语言)没有提供宏替换(也不可能提供),但Pascal功能强大,处理这类问题
不在话下
 
请再谈详细一点, 到底怎么“不在话下”(即如何实现)?
 
那要看你想实现什么样的宏了
 
比如说在FoxBase中
App:=12
OddStr:='App'
&OddStr的值就应该是12。
也就是说可以用OddStr去访问App变量的值。这在Delphi中如何实现?

 
OddStr:=strtoint(App);
 
Hi, wjiachun:
我说的不是这个意见,只了举了个例子,是想通过宏来访问变量。
 
我也是对具体例子的回答而已,因为Delphi本身不能像FoxBase、Foxpro之类的支持宏!
只能具体问题具体分析,当然,一般都有好的解决办法。
 
Delphi是编译型语言,没有宏替换功能。
不过,我自己做了一个单元来实现这个功能。原理是用一个StringList作为宏表,以
<宏名>=<宏值>来保存宏的设置,同时编写宏扩展函数用来展开字符串中的宏(搜索宏表)。
在应用字符串的值之前,调用宏扩展函数。这在SQL语句一类的应用中,很有效。
但要真正实现象FoxBase一样的宏功能还是不可能的,比如,不能通过宏来调用不同的
函数。
 
合用吗?
表Table1有记录a0.b0,c0,字段名为xyz, 而a0,b0,c0又刚好为表Table2的字段,那么:
var
a: String;
begin
a:=Table1.FieldByName('xyz').AsString;
b:=Table2.FieldByname(a).AsString;
end;
 
龙丹:
可否提供你的佳作,让在下一饱眼福?
 
不知道为什么。最近又收不到大富翁的邮件了。

txytlc:
我把LDMacro.pas发给你了,但我为了在宏中可以引用表达式,此单元使用了LDExp
等其它单元,所以,你恐怕只能看一看罢了。
 
放弃吧,不可能的。
不知道为什么总有那么多的朋友还丢不开老的解释型语言的思想。
 
龙丹:
对于delphi中的宏替换,我也有相同的问题,也想拜读大作。能否给我原码?
 
txytlc:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
你可以使用无类型变量。
...
var i,j,s:variant;
...
i := 9;
h := '45';
j := i + j
// j = 54
...

 
更正
...
var i,j,s:variant;
...
i := 9;
s := '45';
j := i + s
// j = 54
...
 
Delphi是编译型语言,没有宏替换功能。
 
同意Derlin的意见,宏代换虽然方便但不是必须得用它。对此可看“编译原理”。
 
后退
顶部