有没有办法忽略文本文件中某些行的阅读?

New*_*art 2 c# ignore lines

我正在尝试在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中显示此信息,我认为这是抛出异常的地方.

有任何想法吗?

sum*_*mer 9

罗杰斯的答案很好,我只是提供了另一种方法.试试这个,

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)

希望这可以帮助


Cal*_*ers 8

为什么不使用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)

  • @Caspar:除非你知道第三行和最后一行开始的字节索引,否则我认为不可能不读取所有行.这是因为你必须扫描文件,直到你找到第一个2` \n\r?`之前你可以排除它之前的所有数据,类似的最后一行你必须找到倒数第二行的换行符. (2认同)

chi*_*oro 8

为什么要完全忽略前两行和最后一行?

根据您的文件的样子,您可能想要分析该行,例如查看第一个字符是否是注释符号,或忽略所有内容,直到找到第一个空行等.

有时,硬编码"魔术"数字并不是一个好主意.如果需要将文件格式更改为包含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)