C# 如何在C中读取文件的特定行#
我试图读取一个文件,但我需要控制文件中的行号。 我尝试使用StreamReader.ReadLine方法,但无法控制行号 这是我的代码:C# 如何在C中读取文件的特定行#,c#,forms,streamreader,C#,Forms,Streamreader,我试图读取一个文件,但我需要控制文件中的行号。 我尝试使用StreamReader.ReadLine方法,但无法控制行号 这是我的代码: private void abrirToolStripMenuItem_Click(object sender, EventArgs e) { string line; if (openFileDialog1.ShowDialog() == DialogResult.OK) { S
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();
}
}
这是一种形式,设计是西班牙语的
任何人都可以帮助我吗?您可以使用
File.ReadLines()
返回IEnumerable
。然后,您可以使用LINQ的Skip()
和FirstOrDefault()
方法跳过所需的行数,并获取第一项(如果没有更多项,则返回null):
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
}
}
line=null;
对于(int i=0;i
您可以使用File.ReadLines()
返回IEnumerable
。然后,您可以使用LINQ的Skip()
和FirstOrDefault()
方法跳过所需的行数,并获取第一项(如果没有更多项,则返回null):
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
}
}
line=null;
对于(int i=0;i
StreamReader.ReadLine方法允许您逐行读取,这将避免将整个文件加载到内存中,这对于大型文件可能是一个问题
Readline到达文件末尾时将返回null,因此使用内部计数器对其进行while循环测试将逐行读取,直到找到所需的行或EOF
private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
{
const int specifiedLine = 32;
string line;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
line = GetSpecifiedLine(openFileDialog1.FileName, specifiedLine);
}
}
private string GetSpecifiedLine(string fileName, int specifiedLine)
{
int lineCount = 0;
using (StreamReader sr = new StreamReader(fileName))
{
lineCount++;
var line = sr.ReadLine();
while (line != null)
{
if (lineCount == specifiedLine)
{
return line;
}
line = sr.ReadLine();
}
return null;
}
}
StreamReader.ReadLine方法允许您逐行读取,这将避免将整个文件加载到内存中,这对于大型文件可能是一个问题 Readline到达文件末尾时将返回null,因此使用内部计数器对其进行while循环测试将逐行读取,直到找到所需的行或EOF
private void abrirToolStripMenuItem_Click(object sender, EventArgs e)
{
const int specifiedLine = 32;
string line;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
line = GetSpecifiedLine(openFileDialog1.FileName, specifiedLine);
}
}
private string GetSpecifiedLine(string fileName, int specifiedLine)
{
int lineCount = 0;
using (StreamReader sr = new StreamReader(fileName))
{
lineCount++;
var line = sr.ReadLine();
while (line != null)
{
if (lineCount == specifiedLine)
{
return line;
}
line = sr.ReadLine();
}
return null;
}
}
您可以尝试以下方法:将文件读取到数组,然后可以轻松有效地控制文件中的行号
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];
}
}
字符串输出=”;
string[]lines=File.ReadAllLines(string.Concat(@textBox1.Text,“\\temp\\test.txt”);
对于(int i=0;i
您可以尝试以下方法:将文件读取到数组,然后可以轻松有效地控制文件中的行号
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];
}
}
字符串输出=”;
string[]lines=File.ReadAllLines(string.Concat(@textBox1.Text,“\\temp\\test.txt”);
对于(int i=0;i
还有line=File.ReadLines().ElementAtOrDefault(行号-1)代码>。我仍然要减去1
,因为我想您需要1个索引行号(“element at”使用基于0的索引)。我认为,它完全等同于您的跳过
,然后是第一个默认值
代码>。我仍然要减去1
,因为我想您需要1个索引行号(“element at”使用基于0的索引)。我认为这完全等同于你的跳过
,然后是第一个或默认值
。问题是“行”没有固定的长度。因此,如果不阅读第1行到第29行,就不能立即跳到第30行。问题是,“行”没有固定的长度。因此,如果不阅读第1行到第29行,您就不能立即跳到第30行。您的代码似乎有一个bug-lineCount++
应该在而循环中。您的代码似乎有一个bug-lineCount++
应该在而循环中