2017-10-17 7 views
0

File.AppendAllLinesを使ってテキストファイルに文字列を書いています。今は50行ごとに「一時停止」という単語を書いています。File.AppendAllLinesコード?テキストファイルに50行後に単語を書く方法

ケース1: これは私が

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

あなたのデータは何ですか?ファイルにはすでにコンテンツが含まれていますか?何を試しましたか? –

+0

改行時に文字列を分割します:\ n、50回ごとにパウゼを追加してください!ごきげんよう!あなたのコードを教えてください? –

+0

このコードは、私が1000のコレクション – peter

答えて

0

をしていたコードである。この場合、2溶液があり、実行時には、ファイルの行ずつを追加した場合。変数タイプintを使用することができます。あなたがファイルに行を追加するたびに、この変数がインクリメントされます。 この変数を50に設定すると、ファイルに「一時停止」行が追加されます。

ケース2:約1000行のファイルがある場合は、「\ n」で分割を使用できます。そして、ループのために、この場合に

4

スイッチ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 }); 

} 
+0

修飾一行は? – peter

+0

1行後のポーズを作成するために必要なコード –

0

あなたはLINQのタグを使用しているとして、私はあなたがしたいあなたを想定しますコードをlinq文に変換します。

あなたはそれを言及していませんが、あなたのdtはDataTableであり、dt.RowsDataRowCollectionを返すと思います。このコレクションは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

を入力してください。countの各項目の後にタイプのオブジェクトを追加する汎用拡張機能IEnumerableを作成します。この方法で、あらゆる種類のコレクションに使用できます: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 
     } 
    } 
} 

:このなしだったかのかのようにこのパラメータは関数の内部で使用しています

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

var result = dt.Rows 
    .Cast<Row>() 
    .Select(row => row.GetData()) 
    .AppendWordEveryCount(wordtToAppend, lineCount); 
:あなたはすべての50番目の行の後に別の行として「一時停止」を追加したいです
関連する問題