我正在尝试添加与帐户相关联的金额。所以我的变量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;
}
答案 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
改为使用prevControl
和currControl
,并检查它们是否有所不同。
答案 1 :(得分:1)
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
}
}