c# - 在 1 个循环中将 2 行写入 TXT
问题描述
我有一个这样的数据表:
TerminalNo Payment ORNO Time
PHW0501 1,000.00 1 1:05pm
PHW0502 2,000.00 2 1:05pm
PHW0501 3,000.00 3 1:10pm
PHW0502 4,000.00 4 1:10pm
PHW0501 5,000.00 5 1:15pm
PHW0502 6,000.00 6 1:15pm
PHW0501 7,000.00 7 1:20pm
PHW0502 8,000.00 8 1:20pm
每次在两个终端(同时或不同时)上付款时,我都想获得两个TerminalNo的付款并将其写入具有不同文件夹路径的不同TXT 文件中。
像这样:
FolderPath1/Txt1
PHW0501, 1,000.00, 1:05pm, 1
FolderPath2/Txt2
PHW0502, 2,000.00, 1:05pm, 2
我只得到这个:
Folder1/Txt1 = PHW0501, 1,000.00, 1:05pm, 1
这是我的代码:
DataRow rw = dtTransaction.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("TerminalNo") == "PHW0501");
DataRow rw2 = dtTransaction.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("TerminalNo") == "PHW0502");
string fileName1 = GeneratedPath1 + DateTime.Now.ToString("MMddyyyy") + ".txt";
string fileName2 = GeneratedPath2 + DateTime.Now.ToString("MMddyyyy") + ".txt";
for (int i = 0; i < dtTransaction.Rows.Count; i++)
{
if (rw.ItemArray[4].ToString().Equals("PHW0501"))
{
if (dtTransaction.Rows[i]["TerminalNo"].ToString().Equals("PHW0501") && !dtTransaction.Rows[i]["ORNo"].ToString().Equals(""))
{
string Time = dtTransaction.Rows[i]["Time"];
double Payment = -double.Parse(dtTransaction.Rows[i]["Payment"].ToString());
int ORNo = dtTransaction.Rows[i]["ORNo"].ToString();
using (StreamWriter sw = File.AppendText(fileName1))
{
sw.Write("PHW0501" + ",");
sw.Write(Payment + ",");
sw.Write(Time + ",");
sw.Write(ORNo);
}
}
}
if (rw2.ItemArray[4].ToString().Equals("PHW0502"))
{
if (dtTransaction.Rows[i]["TerminalNo"].ToString().Equals("PHW0502") && !dtTransaction.Rows[i]["ORNo"].ToString().Equals(""))
{
string Time = dtTransaction.Rows[i]["Time"];
double Payment = double.Parse(dtTransaction.Rows[i]["Payment"].ToString());
int ORNo = dtTransaction.Rows[i]["ORNo"].ToString();
using (StreamWriter sw = File.AppendText(fileName2))
{
sw.Write("PHW0502" + ",");
sw.Write(Payment + ",");
sw.Write(Time + ",");
sw.Write(ORNo);
}
}
}
}
解决方案
使用 LINQ 进行分组。
var grouped = dtTransaction.AsEnumerable()
.Where(row => row["ORNo"].ToString() != "")
.GroupBy(row => row["TerminalNo"]);
foreach (var group in grouped)
{
string folder = group.Key.ToString();
Directory.CreateDirectory(folder);
string filename = DateTime.UtcNow.ToString("MMddyyyy") + ".txt";
string path = Path.Combine(folder, filename);
using (StreamWriter writer = File.AppendText(path))
{
foreach (DataRow row in group)
{
writer.WriteLine(string.Join(",", row.ItemArray));
}
}
}
此处将创建名为 PHW0501 和 PHW0502 的目录。您可以为它们添加一些前缀。
接下来,将在每个目录中创建文件。
逗号分隔的数据被输入到文件中。
推荐阅读
- python - Python 请求 POST - 错误 400
- ios - Swift:实例成员不能用于 ARKitVision 示例中的类型
- java - 如何使用Java从特定日期减法
- javafx - 方法检查锁,在锁释放后运行
- powershell - powershell中的Unicode
- php - 尊重 Laravel 刀片中的换行符
- laravel - 由于外键无法更新记录
- java - Apache Beam 中的窗口数据每小时(顺时针)基础
- c++ - c ++ 11(MSVS2012)正则表达式在多行std :: string中查找文件名
- java - 使用 JeMalloc 查找 Java 应用程序中的本机内存泄漏