C# 如何在文本文件中写50行后的单词

C# 如何在文本文件中写50行后的单词,c#,.net,linq,C#,.net,Linq,我正在使用file.AppendAllLines将字符串写入文本文件,现在我想在每50行之后写入一个单词“Pause”,如何在file.AppendAllLinescode中执行此操作? 这就是我正在做的代码 string test; foreach (DataRow dr in dt.Rows) { test=GetData(dr); File.AppendAllLines("tEST.txt", new string[] { test }); } 在这种情况下,有两种解决方

我正在使用
file.AppendAllLines
将字符串写入文本文件,现在我想在每50行之后写入一个单词“Pause”,如何在
file.AppendAllLines
code中执行此操作? 这就是我正在做的代码

string test;
foreach (DataRow dr in dt.Rows)
{
    test=GetData(dr);
    File.AppendAllLines("tEST.txt", new string[] { test });
}

在这种情况下,有两种解决方案:

案例1:若在运行时,您将逐行追加到文件中。您可以使用变量类型int。对于每个附加到文件的行,此变量都会增加。 若将此变量设为50,则在文件中附加“暂停”行


案例2:如果存在大约1000行的文件,可以使用带“\n”的拆分。在这种情况下,使用for循环有两种解决方案:

案例1:若在运行时,您将逐行追加到文件中。您可以使用变量类型int。对于每个附加到文件的行,此变量都会增加。 若将此变量设为50,则在文件中附加“暂停”行


案例2:如果存在大约1000行的文件,可以使用带“\n”的拆分。使用for循环执行此情况

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

}
for(inti=0,i
将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 });

}
for(inti=0,i
在使用Linq标记时,我假设您希望将代码转换为Linq语句

虽然您没有提到它,但我认为您的
dt
是一个数据表,
dt.Rows
返回一个
DataRowCollection
。此集合实现了
IEnumerable
。显然,您的
有一个返回字符串的
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
扩展功能相当简单。它必须是静态的,并且第一个参数的类型必须是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
        }
    }
}
public static AppendWordEveryCount(此IEnumerable源代码,T itemToAppend,int count)
{
int counter=0;//用于查找每个计数元素的计数器
foreach(源中的T项)
{
yield return T;//只返回序列中的项
计数器=(计数器+1)%count;
if(i==0)//在计数元素之后
{
yield return wordToAppend;//追加项
}
}
}
现在回到你的问题:你想在每50行后面加一行“暂停”:

const string wordToAppend = "Pause";
const int lineCount = 50;

var result = dt.Rows
    .Cast<Row>()
    .Select(row => row.GetData())
    .AppendWordEveryCount(wordtToAppend, lineCount);
const string wordToAppend=“Pause”;
const int lineCount=50;
var结果=dt.行
.Cast()
.Select(行=>row.GetData())
.AppendWordEveryCount(wordtToAppend,lineCount);

在使用Linq标记时,我假设您希望将代码转换为Linq语句

虽然您没有提到它,但我认为您的
dt
是一个数据表,
dt.Rows
返回一个
DataRowCollection
。此集合实现了
IEnumerable
。显然,您的
有一个返回字符串的
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
扩展功能相当简单。它必须是静态的,并且第一个参数的类型必须是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
        }
    }
}
public static AppendWordEveryCount(此IEnumerable源代码,T itemToAppend,int count)
{
int counter=0;//用于查找每个计数元素的计数器
foreach(源中的T项)
{
yield return T;//只返回序列中的项
计数器=(计数器+1)%count;
if(i==0)//在计数元素之后
{
yield return wordToAppend;//追加项
}
}
}
现在回到你的问题:你想在每50行后面加一行“暂停”:

const string wordToAppend = "Pause";
const int lineCount = 50;

var result = dt.Rows
    .Cast<Row>()
    .Select(row => row.GetData())
    .AppendWordEveryCount(wordtToAppend, lineCount);
const string wordToAppend=“Pause”;
const int lineCount=50;
var结果=dt.行
.Cast()
.Select(行=>row.GetData())
.AppendWordEveryCount(wordtToAppend,lineCount);

您有哪些数据?该文件是否已包含内容?您是否将其全部放入?您尝试过什么?在换行符上拆分字符串:\n并在每50次后添加pauze!祝你好运!向我们展示您的代码?此代码位于foreach循环中,我正在迭代1000个集合。您能分享更多代码吗?你真的有1000个不同的集合,每个集合只有一行吗?我修改了代码你有什么数据?该文件是否已包含内容?您是否将其全部放入?您尝试过什么?在换行符上拆分字符串:\n并在每50次后添加pauze!祝你好运!向我们展示您的代码?此代码位于foreach循环中,我正在迭代1000个集合。您能分享更多代码吗?你真的有1000个不同的集合,每个集合只有一行吗?我修改了代码我需要在每50行之后写暂停dt中的一行是一行吗?我需要在每50行之后写暂停dt中的一行是一行吗?