如何在 .NET 中 使用 ANTLR4
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:47
> ReadCsv(string tableName)
{
var csvFile = new FileInfo(Path.Combine(csvDirectory.FullName, $"{tableName}.csv"));
if (!csvFile.Exists)
{
throw new FileNotFoundException($"CSV file {csvFile.FullName} does not exist.");
}
using var reader = new StreamReader(csvFile.FullName);
var headerLine = reader.ReadLine();
if (headerLine == null)
{
throw new InvalidOperationException($"CSV file {csvFile.FullName} is empty.");
}
var headers = headerLine.Split(‘,’);
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line == null) continue;
var values = line.Split(',');
yield return headers.Zip(values).ToDictionary(x => x.First, x => x.Second);
}
}
}
接下来我们就可以开始测试了:
测试用的 CSV 文件内容如下:
```csv
Name,City,Occupation,Company
Alice,New York,Engineer,TechCorp
Bob,Los Angeles,Designer,Creative Inc
Ben,Atlanta,Writer,Publishing House
Charlie,Chicago,Manager,Finance Group
David,Houston,Teacher,School District
Eve,Miami,Student,University
Frank,Seattle,Chef,Restaurant Co
Grace,San Francisco,Doctor,HealthCare
Hannah,Boston,Lawyer,Legal Partners
Ian,Denver,Architect,BuildIt
var directory = new DirectoryInfo("/Users/hkh/Desktop/test");
var engine = new SqlToCsvEngine(directory);
var sql =
"""
SELECT Name, City, Occupation, Company
FROM Employee
WHERE City != 'Miami'
AND Occupation LIKE '%er'
ORDER BY Name ASC, Company DESC
""";
var result = engine.ExecuteQuery(sql);
// 打印头部
foreach (var column in result.First().Keys)
{
Console.Write($"{column}\t");
}
foreach (var row in result)
{
Console.WriteLine();
foreach (var (_, value) in row)
{
Console.Write($"{value}\t");
}
}
输出结果如下:
Name City Occupation Company
Alice New York Engineer TechCorp
Ben Atlanta Writer Publishing House
Bob Los Angeles Designer Creative Inc
Charlie Chicago Manager Finance Group
David Houston Teacher School District
Hannah Boston Lawyer Legal Partners
参考资料
https://github.com/antlr/grammars-v4 https://wizardforcel.gitbooks.io/antlr4-short-course/content/basic-concept.html https://github.com/antlr/antlr4/blob/master/doc/csharp-target.md ANTLR4 权威指南 极客时间 编译原理之美
相关文章
-
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
如何用JS实现在网页上通过鼠标移动批量选择元素的效果?
- 互联网
- 2026年04月20日
-
如何医治一条慢SQL?
如何医治一条慢SQL?
- 互联网
- 2026年04月20日
-
如何学习会计(会计这么学,也太太太简单了)
如何学习会计(会计这么学,也太太太简单了)
- 互联网
- 2026年04月20日
-
如何在Vue中实现单个组件的动态重新加载?
如何在Vue中实现单个组件的动态重新加载?
- 互联网
- 2026年04月20日
-
如何自己DIY手机壳?推荐一个手机壳DIY小程序
如何自己DIY手机壳?推荐一个手机壳DIY小程序
- 互联网
- 2026年04月20日
-
如何做一份精致的简历
如何做一份精致的简历
- 互联网
- 2026年04月20日





