将文件的前10行提取为字符串

时间:2014-02-23 09:44:40

标签: c# streamreader

public void get10FirstLines()
{ 
     StreamReader sr = new StreamReader(path);
     String lines = "";
     lines = sr.readLine();
}

如何在字符串中获取文件的前10行?

7 个答案:

答案 0 :(得分:26)

不是直接使用StreamReader,而是使用返回IEnumerable<string>的{​​{3}}。然后,您可以使用LINQ:

var first10Lines = File.ReadLines(path).Take(10).ToList();

使用File.ReadLines代替File.ReadLines的好处是 读取您感兴趣的行,而不是读取整个文件。另一方面,它仅适用于.NET 4+。如果你想要它用于.NET 3.5,那么使用迭代器块很容易实现。

ToList()的调用是强制对查询进行评估(即实际读取数据),使其完全读取一次。如果没有ToList调用,如果您尝试多次迭代first10Lines,它会多次读取该文件(假设它完全有效;我似乎记得File.ReadLines不是在这方面实施得非常干净。

如果您希望前10行作为字符串(例如将“\ r \ n”分隔开来),那么您可以使用string.Join

var first10Lines = string.Join("\r\n", File.ReadLines(path).Take(10));

显然,您可以通过更改调用中的第一个参数来更改分隔符。

答案 1 :(得分:5)

var lines = File.ReadAllLines(path).Take(10);

答案 2 :(得分:4)

您可以尝试使用File.ReadLines。试试这个: -

var lines = File.ReadLines(path).Take(10);

在您的情况下尝试此操作,因为您希望前10行作为单个字符串,因此您可以尝试使用string.Join(),如下所示:

var myStr= string.Join("", File.ReadLines(path).Take(10));

答案 3 :(得分:3)

StringBuilder myString = new StringBuilder();

TextReader sr = new StreamReader(path);

for (int i=0; i < 10; i++)
{
myString.Append(sr.ReadLine())
}

答案 4 :(得分:2)

String[] lines = new String[10];
for (int i = 0; i < 10; i++)
     lines[i] = sr.readLine();

循环十次并将结果放在一个新数组中。

答案 5 :(得分:0)

public void skip10Lines()
{ 
    StringBuilder lines=new StringBuilder();
    using(StreamReader sr = new StreamReader(path))
    {
     String line = "";
     int count=0;

      while((line= sr.ReadLine())!=null)
      {
         if(count==10)
           break;
         lines.Append(line+Environment.NewLine);
         count++;
      }
     }

 string myFileData=lines.ToString();
 }

OR

public void skip10Lines()
{ 
     int count=0;
     List<String> lines=new List<String>();
     foreach(var line in File.ReadLines(path))
     {
         if(count==10)
           break;
         lines.Add(line);
         count++;
     }
 }

答案 6 :(得分:0)

在Groovy中,一种基于JVM的语言,一种方法是:

def buf = new StringBuilder()

Iterator iter = new File(path).withReader{
    for( int cnt = 0;cnt < 9;cnt++){    
        buf << it.readLine()
    }
}

println buf

因为闭包没有“break”,所以循环嵌套在闭包中,因此Groovy运行时会处理资源处理。