public void get10FirstLines()
{
StreamReader sr = new StreamReader(path);
String lines = "";
lines = sr.readLine();
}
如何獲取字符串中文件的前10行?將文件的前10行提取爲字符串
public void get10FirstLines()
{
StreamReader sr = new StreamReader(path);
String lines = "";
lines = sr.readLine();
}
如何獲取字符串中文件的前10行?將文件的前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));
很明顯,你可以通過改變改變分離器通話中的第一個參數。
非常好的解決方案,我會建議把它放在抽象的可測性背後。 – Gent
var lines = File.ReadAllLines(path).Take(10);
如果用戶讀取2 GB(9999行)文件並且只需要前10行,它是否只訪問前10行? –
@huseyintugrulbuyukisik:不,它會讀取所有內容 - 因此我的答案。 –
'文件。ReadLines()'可能是一個非常大的優化。 –
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();
循環十次並將結果放入新數組中。
您可以嘗試使用File.ReadLines。試試這個: -
var lines = File.ReadLines(path).Take(10);
你的情況,試試這個,只要你想第一個10行作爲一個單一的字符串,所以你可以嘗試使用string.Join()
這樣的:
var myStr= string.Join("", File.ReadLines(path).Take(10));
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++;
}
}
這不會編譯('ReadLine',而不是'readLine'),並且它不會在最後關閉閱讀器。 –
在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運行時管理。
你的問題是不是非常清楚 - 你的方法被調用'skip10Lines'這是不一樣的* *獲得第10行到一個字符串。目前還不清楚你是否真的想要單行或列表中的行。 –
如果這是來自ypur真實代碼:'path'應該是一個參數。 –