【发布时间】:2015-07-03 19:45:03
【问题描述】:
如果我有一个名为 File.txt 的文本文件,其中包含一些数据。例如:
55 90
10 45
33 23
10 500
5 2
第一列称为列C1,第二列称为C2。
然后我有另一个名为 Input.txt 的文件,其中包含两个 SQL 查询:
SELECT *
FROM File
WHERE C2 > 60;
SELECT C1
FROM File;
解析此文件并生成类似于我从真实 DBMS 中获得的输入的一种方法是什么?
到目前为止我已经尝试过了:
// 1. Read the file.
Main obj = new Main();
URL url = obj.getClass().getResource("File.txt");
File file = new File(url.toURI());
FileReader fileReader = new FileReader(file);
BufferedReader bufferReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferReader.readLine()) != null) {
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
String data = stringBuffer.toString(); //this contains the data from File.text
String[] list = data.split(" "); //this stores it into a list
// 2. Read the input file.
Main input = new Main();
URL urlInput = input.getClass().getResource("Input.txt");
File inputFile = new File(urlInput.toURI());
FileReader fileReaderInput = new FileReader(inputFile);
BufferedReader bufferedReaderInput = new BufferedReader(fileReaderInput);
StringBuffer stringBufferInput = new StringBuffer();
String lineInput;
while ((lineInput = bufferedReaderInput.readLine()) != null) {
stringBufferInput.append(lineInput);
stringBufferInput.append("\n");
}
但是我在这里迷路了...我不知道如何解析查询。我的程序设法读取了这两个文件,但是在处理输入文件中的查询时,我似乎无法弄清楚它的逻辑。
【问题讨论】:
-
所以你基本上必须制作一个精简的sql解释器?标记,定义语法,构建表达式树,然后评估。基本上是制作编程语言的所有步骤。祝你好运。
-
是的,这基本上就是我想要做的。
-
这是作业吗?只是好奇你为什么需要这样的功能。解释 sql 查询的方式与解释任何语言的方式相同,您必须构建一个 sql interpreter 看看这个链接以了解解释器是什么。我和@ryanyuyu 一起祝你好运,你需要。
-
您只需要处理 Select、From、Where 关键字吗?如果是这样,那就简化了很多。
-
是的,只有 Select、From 和 Where。但我不知道该怎么做。我只需要查看它的工作示例代码,我相信我可以自己解决剩下的问题。这只是更大计划的一部分。