繁体   English   中英

如何在文本文件中50行后写一个单词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM