2017-10-17 64 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); 
相關問題