我正在尝试在ac#应用程序中读取文本文件,但我不想读取前两行或最后一行.文件中有8行,所以有效地我只想阅读第3,4,5,6和7行.有什么方法可以做到这一点吗?
示例文件
USE [Shelley的其他数据库]
CREATE TABLE db.exmpcustomers(
fName varchar(100)NULL,
lName varchar(100)NULL,
dateOfBirth date NULL,
houseNumber int NULL,
streetName varchar(100)NULL
)ON [PRIMARY]
编辑
好吧,所以,我已经将Callum Rogers的答案应用到我的代码中,并且出于某种原因,它适用于我编辑的文本文件(我创建了一个文本文件,其中包含我不想省略的行)并且它完全符合它的要求,但每当我使用原始文本文件(上面)尝试它时,它会抛出异常.我在DataGrid中显示此信息,我认为这是抛出异常的地方.
有任何想法吗?
罗杰斯的答案很好,我只是提供了另一种方法.试试这个,
List<string> list = new List<string>();
using (StreamReader reader = new StreamReader(FilePath))
{
string text = "";
while ((text = reader.ReadLine()) != null)
{
list.Add(text);
}
list.RemoveAt(0);
list.RemoveAt(0);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
为什么不使用File.ReadAllLines()
然后删除前两行和最后一行?如此小的文件速度差异将不会明显.
string[] allLines = File.ReadAllLines("file.ext");
string[] linesWanted = new string[allLines.Length-3];
Array.Copy(allLines, 2, linesWanted, 0, allLines.Length-3);
Run Code Online (Sandbox Code Playgroud)
为什么要完全忽略前两行和最后一行?
根据您的文件的样子,您可能想要分析该行,例如查看第一个字符是否是注释符号,或忽略所有内容,直到找到第一个空行等.
有时,硬编码"魔术"数字并不是一个好主意.如果需要将文件格式更改为包含3个标题行怎么办?
正如其他答案所示:没有什么可以阻止你用你读过的一行做你想做的事情,所以当然,你也可以忽略它.
编辑,现在您已经提供了一个文件示例:对于您的情况,我绝对不会使用硬编码方法.如果有一天SQL语句应包含另一个字段,或者它是否出现在一行而不是8行,该怎么办?
我的建议:立即读入整个字符串,然后分析它.最安全的方法是使用语法,但如果你假设SQL语句永远不会更复杂,你可以使用正则表达式(仍然比使用行号更好):
string content = File.ReadAllText(filename);
Regex r = new Regex(@"CREATE TABLE [^\(]+\((.*)\) ON");
string whatYouWant = r.Match(content).Groups[0].Value;
Run Code Online (Sandbox Code Playgroud)