0


0

C#2つのファイルを比較し、区切り文字に基づいて一致する行をエクスポートする

これがシナリオです。

テキストファイル(アルファ)、単一の列、多数のアイテムがあります。

2番目のファイルは、4列のcsv(delta)です。

アルファで再度デルタを比較し、アルファがデルタに一致するものが何であれ、デルタの最初の2列のみを新しい.txtファイルにエクスポートする新しいファイル(omega)を作成する必要があります。

例:(Alpha)BeginID

(デルタ):BeginID、Muchmore、Info、Exists

(オメガ):BeginID、Muchmore

このドキュメントには、おそらく1万行が含まれています。 助けてくれてありがとう!

2 Answer


1


collection.containsに列0が含まれている場合にEOF readlineを文字列に分割せずに、alphaをコレクションに読み込み、読み取り用にデルタを開いてから、omegaに書き込みます。

完了しました…​


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 alphaFileContent = new List();

            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 alphaFileContent = new List();

            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());
        }
    }