试图为SUM程序提供控制中断逻辑

时间:2016-03-01 14:21:25

标签: c# loops break

我正在尝试添加与帐户相关联的金额。所以我的变量vControl将成为我的帐户变量,当该变量发生变化时,我需要从循环中断并打印出SUM结果和帐户名称。我可以轻松地管理打印输出部分和SUM逻辑,但我正在努力想出适当的循环逻辑,它遍历数组并在帐户更改时随时中断,并且当帐户更改为再次返回SUM循环时。顺便说一句,我正在读一个CSV文件。

    static void Main(string[] args)
    {
        string[] parsedLine;
        string temp;


        String path = @"C:\Users\jhochbau\documents\visual studio 2015\Projects\CsvReader\CsvReader\Position_2016_02_25.0415.csv";
        //var accounts = new Dictionary<string, Positions>();
        //Adding lines read into a string[];
        string[] lines = File.ReadAllLines(path);
        foreach (string line in lines)
        {
            parsedLine = line.Split(',');
            string vControl = parsedLine[0];


            //need loop here to add these sums and break when vControl changes accounts.
            //int vSettleMMSum += parsedLine[10];
            //int vOpenSum += parsedLine[6];
            //int vBuySum += parsedLine[7];
            //int vSellSum+= parsedLine[8];

        //After each Break need to print out Account name and sums from above.





        }
    }

班级档案:

      public class Positions
    {
        public string account;
        public string symbol;
        public string prevClose;
        public string curPrx;
        public string settlePX;
        public string Mult;
        public double open;
        public int buy;
        public int sell;
        public string netMM;
        public double settleMM;
        public string settleDay;
        public string underlying;


    }

3 个答案:

答案 0 :(得分:1)

你可以在不脱离循环的情况下做你想做的事,看看下面的内容:

    static void Main(string[] args)
    {
        string[] parsedLine;
        string temp;


        String path = @"C:\Users\jhochbau\documents\visual studio 2015\Projects\CsvReader\CsvReader\Position_2016_02_25.0415.csv";
        //var accounts = new Dictionary<string, Positions>();
        //Adding lines read into a string[];
        string[] lines = System.IO.File.ReadAllLines(path);
        string prevControl = string.Empty;
        string currControl = string.Empty;
        int vSettleMMSum = 0;
        int vOpenSum = 0;
        int vBuySum = 0;
        int vSellSum = 0;
        foreach (string line in lines)
        {
            parsedLine = line.Split(',');
            prevControl = currControl;
            currControl = parsedLine[0];


            //need loop here to add these sums and break when vControl changes accounts.
            vSettleMMSum += int.Parse(parsedLine[10]);
            vOpenSum += int.Parse(parsedLine[6]);
            vBuySum += int.Parse(parsedLine[7]);
            vSellSum += int.Parse(parsedLine[8]);

            if (!string.IsNullOrWhiteSpace(prevControl) && !string.Equals(prevControl, currControl))
            {
                //After each Break need to print out Account name and sums from above.
                // Do printing here as part of the loop, at the very end of the loop code block.

                // After printing, reset your values.
                vSettleMMSum = 0;
                vOpenSum = 0;
                vBuySum = 0;
                vSellSum = 0;
            }
        }
    }

我将vControl改为使用prevControlcurrControl,并检查它们是否有所不同。

答案 1 :(得分:1)

像@gmiley一样的

foreach循环算法不起作用,因为它们缺少最后一组。为了使其正确,他们需要在循环后复制一些代码。

这就是为什么我更喜欢使用显式枚举器和两个嵌套循环:

static void Main(string[] args)
{
    var path = @"C:\Users\jhochbau\documents\visual studio 2015\Projects\CsvReader\CsvReader\Position_2016_02_25.0415.csv";
    using (var parsedLines = File.ReadLines(path).Select(line => line.Split(',')).GetEnumerator())
    {
        bool more = parsedLines.MoveNext();
        while (more)
        {
            // Initialize
            var account = parsedLines.Current[0];
            int vSettleMMSum = 0;
            int vOpenSum = 0;
            int vBuySum = 0;
            int vSellSum = 0;
            do
            {
                // Aggregate
                vSettleMMSum += int.Parse(parsedLines.Current[10]);
                vOpenSum += int.Parse(parsedLines.Current[6]);
                vBuySum += int.Parse(parsedLines.Current[7]);
                vSellSum += int.Parse(parsedLines.Current[8]);
                more = parsedLines.MoveNext();
            }
            while (more && account == parsedLines.Current[0]);
            // Consume
            // Here you have the account and sums, do whatever you like (print etc.)
        }
    }
}

答案 2 :(得分:0)

更改变量的声明。你需要属性而不是字段。所以将下一个代码放在你的课程中(程序)

 private string _vControl;
        public string vControl {get
            {
                return _vControl;
            }
            set
            {
                _vControl = value;
                // print account name or what you want
            }
        }