public void get10FirstLines()
{
StreamReader sr = new StreamReader(path);
String lines = "";
lines = sr.readLine();
}
Как я могу получить первые 10 строк файла в строке?
public void get10FirstLines()
{
StreamReader sr = new StreamReader(path);
String lines = "";
lines = sr.readLine();
}
Как я могу получить первые 10 строк файла в строке?
Вместо прямого использования 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));
Очевидно, вы можете изменить разделитель, изменив первый аргумент в вызове.
var lines = File.ReadAllLines(path).Take(10);
Вы можете попытаться использовать File.ReadLines. Попробуйте следующее: -
var lines = File.ReadLines(path).Take(10);
В вашем случае попробуйте это, так как вы хотите, чтобы первые 10 строк были одной строкой, поэтому вы можете попробовать использовать string.Join()
следующим образом:
var myStr= string.Join("", File.ReadLines(path).Take(10));
StringBuilder myString = new StringBuilder();
TextReader sr = new StreamReader(path);
for (int i=0; i < 10; i++)
{
myString.Append(sr.ReadLine())
}
String[] lines = new String[10];
for (int i = 0; i < 10; i++)
lines[i] = sr.readLine();
Это повторяется десять раз и помещает результаты в новый массив.
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++;
}
}
В 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.