[英]How to read a text file for a specific word in lines and write the entire lines to another text file?
[英]How to write a word after 50 lines in text file
我正在使用File.AppendAllLines
将字符串写入文本文件,现在我想每隔50行写一个“ Pause”一词,如何在File.AppendAllLines
代码中做到这File.AppendAllLines
? 这是我正在做的代码
string test;
foreach (DataRow dr in dt.Rows)
{
test=GetData(dr);
File.AppendAllLines("tEST.txt", new string[] { test });
}
将foreach循环切换到for循环并检查模数50的循环控制值。
for (int i = 0, i < dt.Rows.Count (), i++ )
{
test=GetData(dt.Rows[i]);`
if(i % 50 == 0)
//Pause
File.AppendAllLines("tEST.txt", new string[] { test });
}
在这种情况下,有两种解决方案:
情况1:如果在运行时,则逐行附加到文件。 您可以使用变量类型int 。 对于将行追加到文件的每个变量,此变量递增。 您检查此变量等于50,然后在文件中附加“暂停”行。
情况2:如果您已经存在约1000行的文件,则可以将split与'\\ n'一起使用。 并使用for循环来执行这种情况
当您使用Linq标记时,假设您想将代码转换为linq语句。
尽管您没有提到它,但我认为您的dt
是一个DataTable,而dt.Rows
返回一个DataRowCollection
。 此集合实现IEnumerable<Row>
。 显然,您的Row
有一个GetData
,它返回一个字符串。
因此,将dt.Rows
转换为字符串的步骤很简单:
var linesWithoutPause = dt.Rows // returns DataRowCollection
.Cast<Row>() // converts to IEnumerable<Row>
.Select(row => row.GetData()); // from exvery Row extract the data
现在,您想在第50行之后写上“暂停”一词。 您没有提到是要在第50行中附加该单词,还是要在单独的行中附加该单词。 代码将非常相似。
要使其像Linq一样,最好为其创建扩展功能。 有关扩展功能的更多信息,请参见扩展功能解密
我们将创建IEnumerable的通用扩展功能,该功能将在每个count
项之后添加一个类型为object的对象。 这样,您就可以将其用于所有类型的集合:每10个整数后附加0; 每隔20个声音后附加一个哔声等。
扩展功能必须在静态类中。 名称并不重要:
static class EnumerableExtensions
{
// add your extension functions here
}
扩展功能相当简单。 它必须是静态的,并且第一个参数必须是IEnumerable类型,并以关键字this开头。 在函数内部, 此参数就像没有此参数一样使用:
public static AppendWordEveryCount<T>(this IEnumerable<T> source, T itemToAppend, int count)
{
int counter = 0; // a counter to find every count element
foreach (T item in source)
{
yield return T; // just return the item in your sequence
counter = (counter + 1) % count;
if (i == 0) // after count elements
{
yield return wordToAppend; // append the item
}
}
}
现在回到您的问题:您想在每50行之后添加“暂停”作为单独的行:
const string wordToAppend = "Pause";
const int lineCount = 50;
var result = dt.Rows
.Cast<Row>()
.Select(row => row.GetData())
.AppendWordEveryCount(wordtToAppend, lineCount);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.