Запись 2 строк в текстовый формат за 1 цикл

#c# #datatable

#c# #datatable

Вопрос:

У меня есть такая таблица данных:

 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
  

Каждый раз, когда платеж производился на обоих терминалах (одновременно
или нет), я хочу получить оплату как за терминально, так и
запишите его в другой текстовый файл с другим путем к папке.

Вот так:

     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") amp;amp; !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") amp;amp; !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);
            }
        }
    }
}
  

Комментарии:

1. Почему вы публикуете некомпилируемый код? int ORNo = dtTransaction.Rows[i]["ORNo"].ToString();

2. Какие типы столбцов есть в вашей таблице данных? Все это строки? Почему?

3. double Payment — Какой позор! Вы только что потеряли немного денег. Для работы с деньгами используйте decimal тип.

4. Для имени файла / каталога лучше использовать yyyyMMdd формат. Это позволит вам легко сортировать их по дате.

5. Спасибо за советы @AlexanderPetrov

Ответ №1:

Используйте 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. Вы можете добавить к ним некоторый префикс.

Далее в каждом каталоге будет создан файл.

В файл вводятся данные, разделенные запятыми.

Ответ №2:

используйте этот код. Вы должны поставить после пути к файлу «true», чтобы продолжить вторую строку.

 string path =  "PATH TO YOU TEXT FILE WITH FILENAME AND EXTENSION";
using (StreamWriter writetext = new StreamWriter(path, true))
{
     writetext.WriteLine("Language: "   language);
     writetext.WriteLine("Log Date: "   DateTime.Now.ToString("HH:mm:ss dd/MM/yyyy", DateTimeFormatInfo.InvariantInfo));
}
  

Комментарии:

1. Спасибо за ответ. Но это должен быть другой путь и другой текст. Я уже отредактировал свой вопрос, чтобы быть более понятным. Спасибо