2017-10-18 7 views
2

カットオフ。最後の行は、最後のCSV行の最後の4列は、私は簡単にプロセスを記述する場合に役立ちますその多分 <p></p>を遮断している理由を私は知らない

最初に、アプリケーションはListViewで出力されるcsvを読み込みます。個々のListItemを選択できます。各項目について、日付のある時刻を停止することができ、これらはcsvに書き込まれます。これは私がcsv全体を上書きするように動作します。

再起動後、上書きされたcsvはもはや元のものと一致しないため、「未処理の例外」と表示されます。 すべてのレコードは最後を除くOKですし、最後の4つの値があります:

_Dum "+", "+" _Vo "+", "+" _Bi "+", "+" _Da "

builder.AppendLine("_Dum" + "," + "_Vo" + "," + "_Bi" + "," + "_Da" + "\r"); 

//Add Data 

foreach (var data in varModule.List) 
{ 
builder.AppendLine(data._Dum + ","); 

if (data._Stu == "B" || data._Stu == "E") 
{ 
builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau); 
}; 

//Line Break 

builder.AppendLine("\r\n\n"); 
} 
using (StreamWriter sw = new StreamWriter(csvFilePath)) 

{ 
sw.WriteLine(builder); 
sw.Flush(); 
} 

注:私は最後のCSV行は、以前のカットされるだろうwirte \r\n\nとダブル||いけない場合。

+1

キャリッジリターン、改行*アプローチで何かが間違っているようです。なぜあなたは '' \ r "'を第1行の '' AppendLine'の中に追加するのか、 '' AppendLine( "\ r \ n \ n") 'を書く理由を説明できますか?それがあなたのために何かを修正しているようだが、それが文書化された問題/解決策に従わない回避策であれば、まずこの問題を解決しなければ、ヤックシェービングに終わるだろう。 – grek40

+0

改行文字を自分で書いておきたい場合は、@ grek40の内容にまで拡張するには、 'builder.AppendLine()'の代わりに 'builder.Append()'を使います。 –

答えて

0

プログラムが必要なデータを書き込んでいるようではありません。おそらく、次の出力に私は、具体的に出力<NewLine>を追加

_Dum,_Vo,_Bi,_Da<NewLine>

<ValueOf_Dum>,<ValueOf_Vo>,<ValueOf_Bi>,<ValueOf_Da><NewLine>

注意を期待しています。 <NewLine>は、あなたのOSに応じて、"\n"(Unixシステムの場合)または"\r\n"(Windowsシステムの場合)のいずれかである改行文字を表します。 .NETではプラットフォーム固有の改行文字を返すEnvironment.NewLineもあります。 CSVの「標準」は存在しないので、使用する新しい改行文字はあなたの選択です。あなたはそれがはっきりしていないようですので、まずその決定を下す必要があります。

次に考慮する必要があるのは、StringBuilder.AppendStringBuilder.AppendLineの違いです。 Appendは、文字列の末尾に指定したテキストを追加するだけです。AppendLineは、テキストを追加し、その後にEnvironment.NewLineが返す文字が続きます。

あなたのコードでは、明らかに行を構築して全体として追加する必要があるので、一貫してあなたが望むことができないAppendLineを使用します。あなたのやり方では、値の間に一貫して改行文字を追加します。これはCSVでは新しいレコードの開始を意味します。

ファイルに改行文字を間違って追加するだけでなく、手動で追加する改行文字も一貫していません。タイトル行には"\r"を使用します(これはUnixではWindowsではでは問題ありません)。後で"\r\n\n"(新しい行にはAppendLineが追加されています)が使用されます("\r"が先頭にないため、"\n"があるため)。

あなたの次の問題は、コードのこの部分である:

if (data._Stu == "B" || data._Stu == "E") 
{ 
    builder.AppendLine(data._Vo + "," + data._Bi + "," + data._Dau); 
}; 

_Stu"B"または"E"であるときは、_Vo_Bi_Dauの値を追加しています。 _Stuに他の値がある場合はどうしますか?何もない!つまり、そこに不完全なレコードが生成されます。これは、あなたが記述した問題のもっともらしい理由です。 elseの場合に何が起こるべきかを心に留めて、あなたのプログラムに組み込む必要があります。

一般的には、プログラムの意図された流れ、CSV形式、使用している指示がコード内で何をしているか完全にはわからないようです。問題を解決するには、次の手順を実行する必要があります。

  1. 希望の出力と、その出力を生成するプログラムがどのように見えるかを明確に理解します。
  2. CSV形式とその中の改行の意味を理解してください。
  3. 使用する新しい回線形式("\r\n""\n"または)を決め、プログラム全体で一貫して使用します。
  4. 追加するテキストの後にEnvironment.NewLineを追加する場合は、テキストだけを追加する場合はAppend、追加する場合はAppendLineを使用してください。
  5. Stu"B"または"E"ではない場合の処理​​をクリアして、このケースをプログラムに追加してください。
  6. デバッガでプログラムをステップ実行し、実行していることを正確に実行していることを確認します。
関連する問題