C# 读取文本文件时忽略页眉和页脚行
这是我目前的代码:C# 读取文本文件时忽略页眉和页脚行,c#,C#,这是我目前的代码: string _nextLine; string[] _columns; char[] delimiters; delimiters = "|".ToCharArray(); using (StreamReader _reader = ...) { _nextLine = _reader.ReadLine(); while (_nextLine != null) { _columns = _nextLine.Split(delim
string _nextLine;
string[] _columns;
char[] delimiters;
delimiters = "|".ToCharArray();
using (StreamReader _reader = ...)
{
_nextLine = _reader.ReadLine();
while (_nextLine != null)
{
_columns = _nextLine.Split(delimiters);
JazzORBuffer.AddRow();
JazzORBuffer.Server = _columns[0];
JazzORBuffer.Country = _columns[1];
JazzORBuffer.QuoteNumber = _columns[2];
_nextLine = _reader.ReadLine();
}
}
我的文件的前5行如下所示:
PRODUCTS created betwen x and y
Column 1 Header | Columns 2 Header | Column 3 Header | Column 4 Header |
Wendy Z| Dave | John | Steve |
Wendy Z| Dave | John | Steve |
Total number of prods| 49545
在x和y之间创建的产品
第1列标题|第2列标题|第3列标题|第4列标题|
温迪·Z |戴夫|约翰|史蒂夫|
最后3行如下所示:
PRODUCTS created betwen x and y
Column 1 Header | Columns 2 Header | Column 3 Header | Column 4 Header |
Wendy Z| Dave | John | Steve |
Wendy Z| Dave | John | Steve |
Total number of prods| 49545
温迪·Z |戴夫|约翰|史蒂夫|
产品总数| 49545
我需要在代码中更改什么,以便忽略文件中的前3行和最后一行?我不能100%确定我是否理解此问题,但请尝试:
string[] lines = File.ReadAllLines("FilePath");
string[] _columns;
//Start at index 2 - and keep looping until index Length - 2
for (int i = 2; i < lines.Length - 2; i++)
{
_columns = lines[i].Split('|');
JazzORBuffer.AddRow();
JazzORBuffer.Server = _columns[0];
JazzORBuffer.Country = _columns[1];
JazzORBuffer.QuoteNumber = _columns[2];
}
string[]lines=File.ReadAllLines(“文件路径”);
字符串[]_列;
//从索引2开始-并保持循环,直到索引长度为-2
对于(int i=2;i
注意-通过一次性将整个文件读入内存,这将改变您正在执行的操作的性能。如果是一个非常大的文件,这可能无法执行。如果是,请这样说:)我不能100%确定我理解这个问题,但请尝试:
string[] lines = File.ReadAllLines("FilePath");
string[] _columns;
//Start at index 2 - and keep looping until index Length - 2
for (int i = 2; i < lines.Length - 2; i++)
{
_columns = lines[i].Split('|');
JazzORBuffer.AddRow();
JazzORBuffer.Server = _columns[0];
JazzORBuffer.Country = _columns[1];
JazzORBuffer.QuoteNumber = _columns[2];
}
string[]lines=File.ReadAllLines(“文件路径”);
字符串[]_列;
//从索引2开始-并保持循环,直到索引长度为-2
对于(int i=2;i
注意-通过一次性将整个文件读入内存,这将改变您正在执行的操作的性能。如果是一个非常大的文件,这可能无法执行。如果是,请这样说:)能否请您详细解释您试图解决的问题只是好奇,为什么您的一些局部变量以?开始尝试导入一个包含200个文本文件的目录,其中列数可能会有所不同。前40个将是固定的,并且总是在那里,剩余的60个将因它们可能与其中一些不同而有所不同。因此,在SSIS数据流中执行脚本转换任务,一次性将所有文本文件放入数据库。为了清楚地识别它们…请您详细解释一下您试图解决的问题好吗,为什么有些局部变量以x开头?尝试导入一个包含200个文本文件的目录,其中的列数可能会有所不同。前40个将是固定的,并且总是在那里,剩余的60个将因它们可能与其中一些不同而有所不同。因此,在SSIS数据流中执行脚本转换任务,一次性将所有文本文件放入数据库。为了清楚地识别它们…+1是一个好答案,但有一个建议和一个限制。建议:使用简单的行
string[]columns=lines[i].Split(“|”)代码>而不是拆分声明和初始化。限制:这只适用于可以完全放在内存中的小文件,否则File.ReadAllLines将失败。在大文件的情况下,这可能是一个合适的替代品。但是,ReadLines的问题是,您不知道什么时候到达了第二行到最后一行,除非您对文件进行冗余传递,并计算所有行。无论哪种方式,您都有性能限制。我尝试此操作时遇到此错误。错误1当前上下文中不存在名称“i”。此方法有效。但对我来说,由于某种原因,它停在49155行。很奇怪!可以提供机密数据。啊@不,你不知道你是否到达了倒数第二行,但你不需要两次传球就能忽略最后一行。您可以将最近的两行保留在内存中,并且在读取当前行时处理上一行。一旦点击文件的最后一行,您将处理倒数第二行,因此您永远不会处理最后一行(这是所需的行为)。这个想法不像您的解决方案那样清晰或易于解释,但它确实允许处理非常大的文件。+1是一个很好的答案,但有一个建议和一个限制。建议:使用简单的行string[]columns=lines[i].Split(“|”)代码>而不是拆分声明和初始化。限制:这只适用于可以完全放在内存中的小文件,否则File.ReadAllLines将失败。在大文件的情况下,这可能是一个合适的替代品。但是,ReadLines的问题是,您不知道什么时候到达了第二行到最后一行,除非您对文件进行冗余传递,并计算所有行。无论哪种方式,您都有性能限制。我尝试此操作时遇到此错误。错误1当前上下文中不存在名称“i”。此方法有效。但对我来说,由于某种原因,它停在49155行。很奇怪!可以提供机密数据。啊@不,你不知道你是否到达了倒数第二行,但你不需要两次传球就能忽略最后一行。您可以将最近的两行保留在内存中,并且在读取当前行时处理上一行。一旦点击文件的最后一行,您将处理倒数第二行,因此您永远不会处理最后一行(这是所需的行为)。这个想法不像您的解决方案那样清晰或易于解释,但它确实允许处理非常大的文件。