尝试为 SUM 程序提出控制中断逻辑

本文关键字:控制 中断 SUM 程序 | 更新日期: 2023-09-27 18:36:50

我正在尝试将与帐户关联的总和相加。 因此,我的变量 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;

    }

尝试为 SUM 程序提出控制中断逻辑

foreach基于

循环的算法(如答案中的算法@gmiley不起作用,因为它们缺少最后一组。为了正确,他们需要在循环后复制一些代码。

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

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.)
        }
    }
}

你可以做你想做的事而不打破循环,看看下面

    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 并检查它们是否不同。

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

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