streamwriter 将重复行写入文件
streamwriter writing duplicate lines to file
我被难住了。我有一个来自 3 个数据 table 的数据正在写入一个文本文件,但是当我将某个 table 写入该文件时,它正在写入重复项,我不知道为什么。
这是写入文件的代码
public void writeCharge2(StreamWriter sw, string dos1, int i)
{
getCharges(dos1, SqlCon);
foreach (DataRow row in chargeTable.Rows)
{
for (int n = 0; n <= chargeTable.Rows.Count -1; n++)
{
ChargeLine = chargeTable.Rows[n][0].ToString();
writeCharge(sw, dos1, i, ChargeLine);
sw.WriteLine();
payChart.Reset();
payGraph.Reset();
}
}
chargeTable.Reset();
}
public void writeCharge(StreamWriter sw, string dos2, int i, string CPTLine)
{
getPayments(ChargeLine, SqlCon, dos2);
string description = getDesc(CPTLine, SqlCon);
sw.WriteLine(" Description: " + CPTLine + " - " + description);
sw.WriteLine("-----------Payments-----------");
if (i < payGraph.Rows.Count)
{
foreach (DataRow row in payGraph.Rows)
{
for (i = 0; i < row.ItemArray.Length -1; i++)
{
DateTime payDate = Convert.ToDateTime(payGraph.Rows[i][0].ToString());
string payDate1 = payDate.ToString("MM/dd/yyyy");
decimal money = Convert.ToDecimal(payGraph.Rows[i][1].ToString());
string money1 = money.ToString("C");
string payer = payGraph.Rows[i][2].ToString();
sw.Write("Payment Date: " + payDate1 + " | ");
sw.Write("Amount: " + money1 + " | ");
sw.Write("Payer: " + payer);
sw.WriteLine();
}
sw.WriteLine();
}
}
}
public void writeData(StreamWriter sw)
{
clearTables();
getDos(SqlCon);
int i = 0;
foreach(DataRow row in servicetable.Rows)
{
string dosNow = Convert.ToString(servicetable.Rows[i][0]);
setupPat(sw, i);
writeCharge2(sw, dosNow, i);
sw.WriteLine(Environment.NewLine);
i++;
}
这是它被写入文件的方式,您可以看到正在写入的重复行
服务日期:2012 年 8 月 22 日
说明:76775 - 美国后腹膜有限公司
----------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
说明:93922 - 肢体无创 1 或 2 级
----------付款------------
付款日期:09/10/2012 |金额:9.74 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:2.43 美元 |付款人:保险
付款日期:2012 年 9 月 10 日 |金额:9.74 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:2.43 美元 |付款人:保险
说明:76775 - 美国后腹膜有限公司
----------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
这是因为 foreach
在 writeCharge2 函数中不需要循环。您使用 foreach
迭代行,然后在每次迭代中打印所有行,因此对于 2 行,它们将打印两次,对于 3 行 - 3 次等。
我被难住了。我有一个来自 3 个数据 table 的数据正在写入一个文本文件,但是当我将某个 table 写入该文件时,它正在写入重复项,我不知道为什么。
这是写入文件的代码
public void writeCharge2(StreamWriter sw, string dos1, int i)
{
getCharges(dos1, SqlCon);
foreach (DataRow row in chargeTable.Rows)
{
for (int n = 0; n <= chargeTable.Rows.Count -1; n++)
{
ChargeLine = chargeTable.Rows[n][0].ToString();
writeCharge(sw, dos1, i, ChargeLine);
sw.WriteLine();
payChart.Reset();
payGraph.Reset();
}
}
chargeTable.Reset();
}
public void writeCharge(StreamWriter sw, string dos2, int i, string CPTLine)
{
getPayments(ChargeLine, SqlCon, dos2);
string description = getDesc(CPTLine, SqlCon);
sw.WriteLine(" Description: " + CPTLine + " - " + description);
sw.WriteLine("-----------Payments-----------");
if (i < payGraph.Rows.Count)
{
foreach (DataRow row in payGraph.Rows)
{
for (i = 0; i < row.ItemArray.Length -1; i++)
{
DateTime payDate = Convert.ToDateTime(payGraph.Rows[i][0].ToString());
string payDate1 = payDate.ToString("MM/dd/yyyy");
decimal money = Convert.ToDecimal(payGraph.Rows[i][1].ToString());
string money1 = money.ToString("C");
string payer = payGraph.Rows[i][2].ToString();
sw.Write("Payment Date: " + payDate1 + " | ");
sw.Write("Amount: " + money1 + " | ");
sw.Write("Payer: " + payer);
sw.WriteLine();
}
sw.WriteLine();
}
}
}
public void writeData(StreamWriter sw)
{
clearTables();
getDos(SqlCon);
int i = 0;
foreach(DataRow row in servicetable.Rows)
{
string dosNow = Convert.ToString(servicetable.Rows[i][0]);
setupPat(sw, i);
writeCharge2(sw, dosNow, i);
sw.WriteLine(Environment.NewLine);
i++;
}
这是它被写入文件的方式,您可以看到正在写入的重复行
服务日期:2012 年 8 月 22 日
说明:76775 - 美国后腹膜有限公司
----------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
说明:93922 - 肢体无创 1 或 2 级
----------付款------------
付款日期:09/10/2012 |金额:9.74 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:2.43 美元 |付款人:保险
付款日期:2012 年 9 月 10 日 |金额:9.74 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:2.43 美元 |付款人:保险
说明:76775 - 美国后腹膜有限公司
----------付款------------
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
付款日期:09/10/2012 |金额:23.14 美元 |付款人:保险
付款日期:2012 年 9 月 24 日 |金额:5.78 美元 |付款人:保险
这是因为 foreach
在 writeCharge2 函数中不需要循环。您使用 foreach
迭代行,然后在每次迭代中打印所有行,因此对于 2 行,它们将打印两次,对于 3 行 - 3 次等。