2017-10-17 39 views
0

我正在使用File.AppendAllLines编写一个字符串到文本文件中,现在我想在每50行写一个单词'Pause',如何在File.AppendAllLines代码中执行该操作? 这就是我所做的如何在文本文件中的50行之后编写一个单词

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

你有什么数据?该文件是否已经包含内容是你把它放在一起吗?你有什么尝试? –

+0

在换行符上拆分字符串:\ n,并在每50次后添加一次暂停!上帝保佑!向我们展示你的代码? –

+0

此代码位于foreach循环内,我正在迭代1000个集合 – peter

回答

0

的代码有在这种情况下,2解决方案:

1种情况:如果在运行系统中,通过追加行文件中的行。您可以使用变量类型int。对于每一行都附加文件,这个变量增量。 您检查此变量等于50,您将“暂停”行附加到您的文件。情况2:如果您有大约1000行的存在文件,可以使用'\ n'分割。并使用循环来做到这一点的情况下

4

开关foreach循环的循环,并检查模回路控制值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 }); 

} 
+0

我需要写每50行后暂停 – peter

+0

dt.Rows中的一行是一行吗? –

0

当你正在使用LINQ的标签,我想你,你想将你的代码转换成linq语句。

虽然你没有提到它,我认为你的dt是一个数据表,dt.Rows返回DataRowCollection。这个集合实现了IEnumerable<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一样,最好为它创建一个扩展函数。有关扩展功能的更多信息,请参见Extension Functions Demystified

我们将制作IEnumerable的通用扩展函数,它将在每个count项目后添加一个类型的对象。这样您就可以将它用于各种集合:每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); 
相关问题