我正在尝试读取文件,但我需要控制文件中的行号。 我尝试使用StreamReader.ReadLine方法,但无法控制行号。
这是我的代码:
private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
{
string line;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamReader sr = new
StreamReader(openFileDialog1.FileName);
//Read specified line with StreamReader
sr.Close();
}
}
它是一种形式,设计是西班牙语的。
请任何人可以帮助我吗?
答案 0 :(得分:4)
您可以使用File.ReadLines()
来返回IEnumerable<string>
。然后,您可以使用LINQ的Skip()
和FirstOrDefault()
方法来跳过所需的行数,并获取第一个项目(如果没有更多项目,则返回null):
line = File.ReadLines().Skip(lineNumber - 1).FirstOrDefault()
Jeppe评论说这也可以这样写:
line = File.ReadLines().ElementAtOrDefault(lineNumber - 1);
我使用lineNumber - 1
是因为它是跳过行,因此您要为第1行指定Skip(0)
。
如前所述,如果行未超出文件末尾,这会将line
设置为null
。
如果您必须使用 StreamReader
,那么您只能循环调用ReadLine()
,直到找到所需的行号或结束。文件:
line = null;
for (int i = 0; i < lineNumber; ++i)
{
if ((line = sr.ReadLine()) == null)
{
break; // end of file reached
}
}
答案 1 :(得分:0)
StreamReader.ReadLine方法允许您逐行读取,这样可以避免将整个文件加载到内存中,这对于大文件来说可能是个问题。
Readline到达文件末尾时将返回null,因此使用内部计数器进行的while循环测试将逐行读取,直到找到所需的行或EOF为止。
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
{
Debug.Log("Key UpArrow pressed.");
}
}
答案 2 :(得分:0)
您可以尝试使用此方法:将文件读取到数组,然后可以轻松而有效地控制文件中的行号。
string output = "";
string[] lines = File.ReadAllLines(String.Concat(@textBox1.Text, "\\temp\\test.txt"));
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains("Binh"))
{
output = lines[i - 1];
}
}