2016-05-19 10 views
0

私は、時系列のcsvファイルをソートしたい、これが私のコードです:Foreachループが正しく出力されませんか?

​​

しかし、それは年代順にファイルを並べ替えていないだけでなく、dueDateのための色も同様に正確に表示されていません。 yellowのみが表示されています。

私はforeachループについてよく分かりませんし、ラムダには新しく、List<T>とLINQです。

EDIT#1:

私は以下のソリューションのいくつかのようなforループの外foreachループを配置しようとしたが、bgColourその後動作していないようでした。

コードの下のセットは、私が実行したいものの続きです:

ので
for (int i = 0; i < line.Length; i++) 
{ 
    string[] col = line[i].Split(new string[] { "," }, StringSplitOptions.None); 

    ... (All the array and foreach codes from above...) 

    if (col[1] == "Open") 
    { 
     if (col[9] == "DEFAULT") 
     { 
      sb1.AppendLine(new1 + bgColour + new2 + bgColour + new3); 
      Label1.Text = sb1.ToString(); 
     } 
    } 
} 

、右、私はこれについてはよく分からないけど、bgColourは、AppendLine前でなければならないであろうか? AppendLineforループ内にあります。このように私はどうすれば回避できますか?

EDIT#2:thisのようないくつかの情報源に基づいて

for (int i = 0; i < line.Length; i++) 
{ 
    string[] col = line[i].Split(new string[] { "," }, StringSplitOptions.None); 
    string[] dates = col[7].ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
    Array.Sort(dates); // I know there's a problem here, please see below. 

    foreach (string date in dates) 
    { 
     DateTime dueDate = DateTime.ParseExact(date, "dd/MM/yyyy", null); 

     if (dueDate == DateTime.Today) 
     { 
      // if due date is today, blue 
      bgColour = "40FFFF"; 
     } 

     else if (dueDate > DateTime.Today) 
     { 
      // if due date is not today yet, white 
      bgColour = "FFFFFF"; 
     } 

     else 
     { 
      // if due date has passed, yellow 
      bgColour = "FFFF40"; 
     } 
    } 

    if (col[1] == "Open") 
    { 
     if (col[9] == "DEFAULT") 
     { 
      sb1.AppendLine(new1 + bgColour + new2 + bgColour + new3); 
      Label1.Text = sb1.ToString(); 
     } 
    } 
} 

が、それはArray.Sort()だけで動作すると述べている:

私はこのコードのセットで動作するようにbgColourのための別の方法を見つけました良いDateTime配列なので、私はそれをテストすることにしましたが、私のコードではうまくいかなかったのです。ただし、今回はbgColourが導入されています。

私は私のforeachループはケースのように想定されていないforループでまだであることを知っています。誰かが私にforeachのループアウトを手伝ってもらえるといいですね。提供される説明も素晴らしいでしょう。

+1

なぜforループでforeachループを使用しますか? for foreachループではありませんか? –

+1

そして、あなたは 'bgColour'で何をするつもりですか?これは 'CSVEntry'のプロパティに割り当てられますか? –

+0

@ romain-aga申し訳ありませんが、私はそれについて知りませんでした。 – user6234613

答えて

0

csvファイルのすべての行に対してソートと出力を実行しています。最初にcsvList全体を構築し、それらの並べ替えと出力を実行する必要があります。

string bgColour = ""; 

for (int i = 0; i < line.Length; i++) 
{ 
    string[] col = line[i].Split(new string[] { "," }, StringSplitOptions.None); 

    csvList.Add(new CSVEntry() { date = DateTime.ParseExact(col[7], "dd/MM/yyyy", null) }); 
} 

var dates = csvList.OrderBy(x => x.date).Select(x => x.date); 

foreach (DateTime dueDate in dates) 
{ 
    if (dueDate == DateTime.Today) 
    { 
     // if due date is today, blue 
     bgColour = "40FFFF"; 
    } 

    else if (dueDate > DateTime.Today) 
    { 
     // if due date is not today yet, white 
     bgColour = "FFFFFF"; 
    } 

    else 
    { 
     // if due date has passed, yellow 
     bgColour = "FFFF40"; 
    } 
} 
+0

'bgColour'はもう動かないのですか? 'for'ループの外側に配置した後でさえも。 – user6234613

+0

@ user6234613これは、あなたが何をしているかによって異なります。このコードは、ループのocurrsごとにbhColourの値を上書きします。あなたはそれで何かをする必要があります。 – CathalMF

+0

私は自分が何をする必要があるかについて考えを持っていません。しかし、私は自分の質問を編集して、自分が望むものを自分自身で明確にしました。それが役に立てば幸い。 – user6234613

0
for (int i = 0; i < line.Length; i++) 
{ 
    string bgColour = ""; 

    string[] col = line[i].Split(new string[] { "," }, StringSplitOptions.None); 

    csvList.Add(new CSVEntry() { date = DateTime.ParseExact(col[7], "dd/MM/yyyy", null) }); 
} 

var dates = csvList.OrderBy(x => x.date).ToList(); 

foreach (DateTime dueDate in dates) 
{ 
    if (dueDate == DateTime.Today) 
    { 
     // if due date is today, blue 
     bgColour = "40FFFF"; 
    } 

    else if (dueDate > DateTime.Today) 
    { 
     // if due date is not today yet, white 
     bgColour = "FFFFFF"; 
    } 

    else 
    { 
     // if due date has passed, yellow 
     bgColour = "FFFF40"; 
    } 
} 
0

I多分間違っている、私はあなたがこのようなものがあるとします。

public class CSVEntry 
{ 
    public string bgColor { get; set;} 
    public DateTime date { get; set; } 
} 

だから、簡単にこれであなたのCSVを解析することができます:あなたが持っている今

List<CSVEntry> csvList = line.Select(l => l.Split(',')). 
       Select(col => { 
        CSVEntry entry = new CSVEntry { date = DateTime.ParseExact(col[7], "dd/MM/yyyy", null)}; 
        if (entry.date == DateTime.Today) 
         date.bgColour = "40FFFF"; 
        else if (entry.date > DateTime.Today) 
         date.bgColour = "FFFFFF"; 
        else 
         date.bgColour = "FFFF40"; 
        return entry;}). 
       OrderBy(csventry => csventry.date).ToList(); 

dateでソートされたCSVEntryのリストと各エントリはbgColorに対応していますgの日付に。

+0

私は 'CSVEntry'クラスを持っています。しかし、 'date.bgColour'では、このエラーを表示します:'名前 '日付'は現在のコンテキストに存在しません '。 – user6234613

関連する問題