C#比较两个文件并根据分隔符导出匹配的行

时间:2009-12-01 21:04:29

标签: c#

这是情景。

我有一个文本文件(alpha),单列,包含一堆项目。

我的第二个文件是一个包含4列的csv(delta)。

我必须再次使用alpha比较delta并创建一个新文件(omega),其中alpha匹配delta的任何内容,它只会将delta中的前两列导出到新的.txt文件中。

实施例: (Α) BeginID

(δ): BeginID,Muchmore,信息,已存在

(欧米茄): BeginID,Muchmore

这个文件可能有10k行。感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我可能会将alpha加载到集合中然后打开delta进行读取,而不是EOF readline成为字符串,拆分,如果collection.contains列0则写入omega。

完成...

答案 1 :(得分:1)

这是完成所需任务的粗略方法:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string alphaFilePath = @"C:\Documents and Settings\Jason\My Documents\Visual Studio 2008\Projects\Compte Two Files\Compte Two Files\ExternalFiles\Alpha.txt";

            List<string> alphaFileContent = new List<string>();

            using (FileStream fs = new FileStream(alphaFilePath, FileMode.Open))
            using(StreamReader rdr = new StreamReader(fs))
            {
                while(!rdr.EndOfStream)
                {
                    alphaFileContent.Add(rdr.ReadLine());
                }
            }

            string betaFilePath = @"C:\Beta.csv";

            StringBuilder sb = new StringBuilder();


            using (FileStream fs = new FileStream(betaFilePath, FileMode.Open))
            using (StreamReader rdr = new StreamReader(fs))
            {
                while(! rdr.EndOfStream)
                {
                    string[] betaFileLine = rdr.ReadLine().Split(Convert.ToChar(","));

                    if (alphaFileContent.Contains(betaFileLine[0]))
                    {
                        sb.AppendLine(String.Format("{0}, {1}", betaFileLine[0], betaFileLine[1]));
                    }
                }


               }

using (FileStream fs = new FileStream(@"C:\Omega.txt", FileMode.Create))
            using (StreamWriter writer = new StreamWriter(fs))
            {
                writer.Write(sb.ToString());
            }

                Console.WriteLine(sb.ToString());
            }
        }
    }

基本上它会读取一个txt文件,将内容放入列表中。然后它读取一个csv文件(假设没有列)并匹配这些值以创建一个StringBuilder。在您的代码中,将StringBuilder替换为创建新的txt文件。

编辑:如果您希望单击按钮运行代码,则将其放在按钮单击处理程序(或新例程并调用它)中:

public void ButtonClick (Object sender, EventArgs e)
{
string alphaFilePath = @"C:\Documents and Settings\Jason\My Documents\Visual Studio 2008\Projects\Compte Two Files\Compte Two Files\ExternalFiles\Alpha.txt";

            List<string> alphaFileContent = new List<string>();

            using (FileStream fs = new FileStream(alphaFilePath, FileMode.Open))
            using(StreamReader rdr = new StreamReader(fs))
            {
                while(!rdr.EndOfStream)
                {
                    alphaFileContent.Add(rdr.ReadLine());
                }
            }

            string betaFilePath = @"C:\Beta.csv";

            StringBuilder sb = new StringBuilder();


            using (FileStream fs = new FileStream(betaFilePath, FileMode.Open))
            using (StreamReader rdr = new StreamReader(fs))
            {
                while(! rdr.EndOfStream)
                {
                    string[] betaFileLine = rdr.ReadLine().Split(Convert.ToChar(","));

                    if (alphaFileContent.Contains(betaFileLine[0]))
                    {
                        sb.AppendLine(String.Format("{0}, {1}", betaFileLine[0], betaFileLine[1]));
                    }
                }
            }

using (FileStream fs = new FileStream(@"C:\Omega.txt", FileMode.Create))
        using (StreamWriter writer = new StreamWriter(fs))
        {
            writer.Write(sb.ToString());
        }
    }
相关问题