我正在尝试编写一个简单的SQL解析器来将sql语句分解为其基本部分.但是,我遇到嵌套查询的问题.一个例子说明最好的:
sql = "select * from Customers where id in (select customer_id from Orders where 1=1)"
Set re = New RegExp
re.IgnoreCase = True
re.Pattern = "^(.*)\swhere\s(.*)$"
re.Global = True
Set matches = re.Execute( sql )
If matches.count > 0 Then
Set submatches = matches(0).Submatches
where_part = Trim(submatches(1))
everything_else = Trim(submatches(0))
End If
Response.Write where_part & "<br>"
Response.Write everything_else & "<br>"
Run Code Online (Sandbox Code Playgroud)
在这里,我希望where_part包含"id in(从订单中选择customer_id,其中1 = 1)"和everything_else包含"select*from Customers".也就是说,我希望它尽可能地贪婪,第二个(.*)和第一个无私.换句话说,我希望everything_else不包含任何地方.
但是,我得到everything_else ="select*from customer in id in(select order_id from Orders"and where_part ="1 = 1)"
如何在不诉诸凌乱的非regexp字符串解析的情况下解决这个问题?
我最近熟悉了Boost库,我想在我的Xcode项目中使用它.但遗憾的是,没有关于如何做到的HowTo或FAQ :(
在Xcode中构建和使用Boost库的操作顺序是什么?
我有一堆表格,我嵌入在tabpages(有些嵌入了两层和三层深),我现在怀疑是给我带来麻烦.我被告知用户控制是更好的方法.
现在我想知道如何尽可能快地完成这项工作.
它复制和粘贴一样简单吗?
我有大约40种我需要移动的表格,而不是很多时间去做,所以任何帮助都非常感谢.
这就是我嵌入表单的方式:
public static void ShowFormInContainerControl(Control ctl, Form frm)
{
frm.TopLevel = false;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.Visible = true;
ctl.Controls.Add(frm);
}
public static void DockControl(this Control control, UserControl userControl)
{
userControl.Dock = DockStyle.Fill;
control.Controls.Clear();
control.Controls.Add(userControl);
}
Run Code Online (Sandbox Code Playgroud) 我有9种不同的语法.其中一个将被加载,具体取决于它正在解析的文件的第一行txt.
我正在考虑将词法分析器/解析器派生到sep中.类,然后在我得到匹配时立即实例化它们 - 不确定这是否会减慢我的速度但不会.我想一些基准测试是有序的.
真的,速度绝对是我的目标,但我知道这是丑陋的代码.
现在代码看起来像这样:
sin.mark(0)
site = findsite(txt)
sin.reset()
if ( site == "site1") {
loadlexer1;
loadparser1;
} else if (site == "site2") {
loadlexer2;
loadparser2;
}
.................
} else if (site == "site8") {
loadparser8;
loadparser8;
}
findsite(txt) {
...................
if line.indexOf("site1-identifier") {
site = site1;
} else if(line.indexOf("site2-identifier") {
site = site2;
} else if(line.indexOf("site3-identifier") {
site = site3;
}
.........................
} else if(line.indexOf("site8-identifier") {
site = site8;
}
}
Run Code Online (Sandbox Code Playgroud)
一些澄清
1)是的,我真的有9个不同的语法,我用antlr构建,所以他们将拥有自己的词法分析器/解析器objs.
2)是的,截至目前我们正在比较字符串,并且显然将用某种整数映射替换.我也考虑过将网站标识符粘贴到一个正则表达式中,但是我不认为这会加快任何速度.
3)是的,这是伪代码所以我不会对这里的语义过于挑剔.. …
我在PHP中生成这样的SQL查询:
$sql = sprintf("UPDATE %s SET %s = %s WHERE %s = %s", ...);
Run Code Online (Sandbox Code Playgroud)
由于此查询的几乎每个部分都是动态的,我需要一种方法来动态确定表的主键,这样我就有了这样的查询:
$sql = sprintf("UPDATE %s SET %s=%s WHERE PRIMARY_KEY = %s", ...);
Run Code Online (Sandbox Code Playgroud)
表的主键是否有MySQL关键字,或者是获取它的方法?
我之前使用过information_schema数据库来查找这样的信息,但如果我不必诉诸于此,那就太好了.
我们有一个在.NET 1.1中启动的项目,转移到.NET 2.0,最近再次移动到.NET 3.5.该项目极其数据驱动,并为其许多数据文件使用XML.其中一些XML文件非常庞大,我想借此机会改进应用程序与它们的交互.如果可能的话,我想避免在任何时候都将它们完全保存在内存中,但另一方面,我想快速访问它们的数据.
当前设置使用XmlDocument和XPathDocument(取决于它何时写入和由谁编写).首次请求并在内部数据结构中缓存数据(而不是XML,在大多数情况下会占用更多内存).在过去,这是一个很好的模型,因为它具有快速访问时间和低内存占用(或至少,令人满意的内存占用).然而,现在有一个功能可以一次性查询大部分信息,而不是我们之前拥有的很好分散的请求.这会导致XML加载,验证和解析成为性能的可见瓶颈.
给定一个大型XML文件,在没有内存中的XML的情况下,重复查询其内容(例如,"具有id = B的元素A是否存在?")的最有效和响应方式是什么?
请注意,如果我们可以提供帮助,数据本身可以在内存中,而不是在更臃肿的XML格式中.在最坏的情况下,我们可以接受加载到内存中的单个文件进行解析,然后再次卸载以释放资源,但我想尽可能避免这种情况.
考虑到我们已经在尽可能地缓存数据,这个问题也可以被解读为"哪个更快并且使用更少的内存; XmlDocument,XPathDocument基于XmlReader或XDocument/ LINQ-to-XML进行解析?"
编辑:更简单,我们可以随机访问磁盘上的XML而无需一次读取整个文件吗?
XML文件有一些记录:
<MyXml>
<Record id='1'/>
<Record id='2'/>
<Record id='3'/>
</MyXml>
Run Code Online (Sandbox Code Playgroud)
我们的用户界面想知道是否存在id为3的记录.如果可以的话,我们想要找出而不必解析并加载文件中的每条记录.因此,如果它在我们的缓存中,则没有XML交互,如果不是,我们可以将该记录加载到缓存中并响应请求.
使用可扩展,快速的方式查询和缓存XML数据文件,以便我们的用户界面能够响应,而无需借助多个线程或将整个XML文件长期保留在内存中.
我认识到,有可能是在这个地方博客或MSDN文章,我会继续我谷歌已经发布了这个问题后,但如果任何人有一些数据,也许会有帮助,或者一种方法是好还是一些例子比另一个更快,那将是伟大的.
更新
XMLTeam今天发布了一个博客,提供了关于何时在.NET中使用各种XML API的很好的建议.它看起来像是基于的东西,XmlReader并且IEnumerable是我在这里给出的场景的最佳选择.
我有一个问题,我似乎无法找到答案.
使用Perl我需要在Windows和unix平台上使用脚本.问题是在Windows上我们使用Win32特有的模块,如Win32 :: Process,并且这些模块在unix上不存在.
我需要一种方法只在Windows上包含这些Win32模块.
if($^O =~ /win/i)
{
use win32::process qw(CREATE_NEW_CONSOLE);
}
else
{
#unix fork
}
Run Code Online (Sandbox Code Playgroud)
问题在于使用windows语句.无论我尝试什么,这都不能在unix上编译.
我尝试过使用动态evals,要求,BEGIN等.
这个问题有一个很好的解决方案吗?任何帮助将不胜感激.
提前致谢,
担
更新:
一位同事向我指出这是正确的方法.
require Win32;
require Win32::Process;
my $flag = Win32::Process::CREATE_NEW_CONSOLE();
Win32::Process::Create($process,
$program,
$cmd,
0,
$flag, ".") || die ErrorReport();
print "Child started, pid = " . getPID() . "\n";
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助!
担
我正在开始一个全新的项目 - 我应该查看我的规范并决定应用哪些设计模式,或者只是想出一个组织的概念并允许模式通过重构有机地出现?
根据您的经验,哪种技术最有效率,并且更有可能实现干净优雅的代码?
我也想知道是否有没有GoF定义的设计模式,但可能同样有价值?如果是这样,有什么有用的资源可以告诉自己这些?
这是我正在参与的辩论.我想得到更多的意见和观点.
我们有一些在构建时生成的类来处理数据库操作(在这个特定情况下,使用SubSonic,但我不认为这对于这个问题非常重要).生成设置为Visual Studio中的预构建步骤.因此,每次开发人员(或官方构建过程)运行构建时,都会生成这些类,然后将其编译到项目中.
现在有些人声称,在源代码控制中保存这些类可能会导致混淆,以防您获得的代码与您自己的环境中生成的代码不匹配.
我想有办法追溯代码的历史,即使它通常被视为黑盒子.
任何论据或反驳论点?
由于上述原因,此时我不会选择接受的答案.
我正在学习Erlang
SO用户可以提供任何Erlang应用程序部署的有趣示例吗?
我希望深入了解Erlang使用过去的电信,以及Erlang在开发/部署过程中带来的任何问题或意外好处.
我希望这会给一些更广泛的背景,并为我和其他任何人跳进Erlang的哨声!
提前致谢!
erlang development-environment scalability production-environment
parsing ×2
refactoring ×2
.net-3.5 ×1
antlr ×1
architecture ×1
boost ×1
build ×1
c# ×1
c++ ×1
dictionary ×1
erlang ×1
java ×1
linq-to-xml ×1
macos ×1
mysql ×1
performance ×1
perl ×1
php ×1
primary-key ×1
regex ×1
regex-greedy ×1
scalability ×1
sql ×1
vbscript ×1
windows ×1
winforms ×1
xcode ×1
xml ×1