1

今日のレコードのみを選択するなどの基準はほとんどありません。また、レコードに「CA」の文字が含まれている場合は、これら2つの前に基準を追加して、ID番号に基づいて重複するレコードをスキップします。

これが私のコードです

    private void btn_convert_Click(object sender, EventArgs e)
    {
        if ((textBox1.Text == "" )&& (textBox2.Text == ""))
        {
            MessageBox.Show("Please specify input and output");
        }

       StringBuilder csvFile = new StringBuilder();
       string temp = "";      
       // string[] file = File.ReadAllLines(@"C:\Users\Program\Desktop\test.txt");         
       string[] file = File.ReadAllLines(textBox1.Text);
       foreach (string line in file)
        {
            //here I want to add an if condition where only write the unique records based on ID number

          if ((line.Contains(DateTime.Now.ToString("MM/dd/yyyy"))) && (line.Contains("\tAU\t"))){ 
          if (line.Contains("\t"))
                 {
                temp = line.Replace("\t", ",");

                csvFile.Append(temp + "\r\n");

                continue;
                 }
            csvFile.Append(line + "\r\n");
                }
        }

    //File.WriteAllText(@"C:\Users\Program\Desktop\test.csv", csvFile.ToString());
       File.WriteAllText((textBox2.Text + "\\test.csv"), csvFile.ToString());
       MessageBox.Show("CSV file successfully created at the following location :\n" + textBox2.Text);
    }
4

3 に答える 3

1

あなたの例から、最初の出現だけを維持するのではなく、複数回出現するレコードを完全に除外したいと思いますか?

file = file.Where(line => line.Contains("\t"))
           .GroupBy(line => line.Substring(0, line.IndexOf('\t')))
           .Where(g => g.Count() == 1)
           .Select(g => g.First())
           .ToArray();
于 2012-12-11T18:35:09.653 に答える
0

このアプローチを試してください

        string x = "";
        using (StreamReader sr = new StreamReader(@"d:\test.txt"))
            x = sr.ReadToEnd();

        var mynewlist = (from v in x.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                         let items = v.Split(new string[] { "\t" }, StringSplitOptions.RemoveEmptyEntries)
                         where items.Count() == 5
                         select new
                         {
                             ID = int.Parse(items[0]),
                             FamilyN = items[1],
                             LastN = items[2],
                             Country = items[3],
                             Date = DateTime.ParseExact(items[4], "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)
                         }).GroupBy(X => X.ID).Where(X => X.Count() == 1).Select(X => X.First());//add any condition here

        //mynewlist is a strongly typed List
        string output = "";
        foreach (var item in mynewlist)
            output += item.ID + "," + item.FamilyN + "," + item.LastN + "," + item.Country + "," + item.Date.ToString("MM/dd/yyyy") + "\r\n";


        using (StreamWriter sw = new StreamWriter(@"d:\test.csv"))
            sw.Write(output);
于 2012-12-11T22:02:23.180 に答える
-1

これはただ速くて汚いです、そして私は今それをテストすることができないので、それがそのまま動作することを保証することさえできません、しかしそれはあなたがそれをすることができる方法をあなたに示すのに十分近いはずです。

private void btn_convert_Click(object sender, EventArgs e)
{
    if ((textBox1.Text == "") && (textBox2.Text == ""))
    {
        MessageBox.Show("Please specify input and output");
    }

    StringBuilder csvFile = new StringBuilder();
    string temp = "";
    string[] file = File.ReadAllLines(textBox1.Text);
    List<int> idList = new List<int>();
    foreach (string line in file)
    {
        string[] cols = line.Split('\t');
        if (cols.Length > 0)
        {
            int colId = -1;
            if (int.TryParse(cols[0], out colId))
            {
                if (idList.contains(colId))
                {
                    continue;
                }
                idList.Add(colId);
            }
        }

        if ((line.Contains(DateTime.Now.ToString("MM/dd/yyyy"))) && (line.Contains("\tAU\t")))
        {
            if (line.Contains("\t"))
            {
                temp = line.Replace("\t", ",");

                csvFile.Append(temp + "\r\n");

                continue;
            }
            csvFile.Append(line + "\r\n");
        }
    }

    File.WriteAllText((textBox2.Text + "\\test.csv"), csvFile.ToString());
    MessageBox.Show("CSV file successfully created at the following location :\n" + textBox2.Text);
}
于 2012-12-11T18:40:43.397 に答える