Извлечение первых 10 строк файла в строку

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

Как я могу получить первые 10 строк файла в строке?

Ответ 1

Вместо прямого использования StreamReader используйте File.ReadLines, который возвращает IEnumerable<string>. Затем вы можете использовать LINQ:

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

Преимущество использования File.ReadLines вместо File.ReadAllLines заключается в том, что он читает только строки, которые вас интересуют, вместо чтения весь файл. С другой стороны, он доступен только в .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));

Очевидно, вы можете изменить разделитель, изменив первый аргумент в вызове.

Ответ 2

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

Ответ 3

Вы можете попытаться использовать File.ReadLines. Попробуйте следующее: -

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

В вашем случае попробуйте это, так как вы хотите, чтобы первые 10 строк были одной строкой, поэтому вы можете попробовать использовать string.Join() следующим образом:

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

Ответ 4

StringBuilder myString = new StringBuilder();

TextReader sr = new StreamReader(path);

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

Ответ 5

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

Это повторяется десять раз и помещает результаты в новый массив.

Ответ 6

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();
 }

ИЛИ

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++;
     }
 }

Ответ 7

В 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.