0

2 つのファイル内のテキストを比較する方法を見つけようとしています。一致が見つかった場合は、プロセスを実行します。

ファイルの例を次に示します。

「ファイル A」 = この形式のテキストの自動リスト。

example1
ex2
289 Example
fht_nkka

'File B' = ディレクトリ検索からのファイル名。

example1
test2
test4785

私の 2 つのサンプル ファイルを使用して、両方を検索し、一致するものを見つけたいと思います。

したがって、上記の「ファイル A」には「example1」が含まれ、「example1」は「ファイル B」にあります。私ができるようにしたいのは、すべての一致に基づいて 'string[] 一致を作成することです。これを行う簡単な方法はありますか?

注: これらのファイルには、常に同じ行データまたは行数があるとは限りません。

4

4 に答える 4

1

これを整理することができました。これが私がやったことです。

var fileAcontents = File.ReadAllLines(fileA);
var fileBcontents = File.ReadAllLines(fileB);

HashSet<string> hashSet = new HashSet<string>(fileAcontents);
foreach (string i in fileBList)
{
    if (hashSet.Contains(i))
    {
        // <- DO SOMETHING :)
    }
}
于 2013-10-03T13:01:42.927 に答える
1
  1. 2 つのファイルのそれぞれで を使用System.IO.File.ReadAllLines()して、2 つの string 配列を作成します。
  2. ファイル名を含む配列のソート済みバージョンを作成して、検索パフォーマンスを向上させます。この目的で LINQ を使用できます。
  3. 最初のファイルのレイアウトが固定されている場合、必要なファイル名は常に各レコードの 4 行目にある必要があるためfor、2 番目の配列で固定インクリメントのループを使用して、必要なファイル名を読み取ることができます。
  4. Array.BinarySearch()必要なファイル名がファイルのリスト (他の配列) に存在するかどうかをすばやく見つけるために使用します。

コードの大まかなスケッチは次のとおりです。

string[] AllRecs = System.IO.File.ReadAllLines(FIRST_FILE_PATH);
string[] AllFileNames = System.IO.File.ReadAllLines(SECOND_FILE_PATH);
Array.Sort(AllFileNames);

for (int i = 3; i < AllRecs.Length; i += 8) 
{
    if (Array.BinarySearch(AllFileNames, AllRecs(i) + ".exe") >= 0)
        System.Diagnostics.Process.Start(AllRecs(i) + ".exe");

}
于 2013-09-09T12:52:53.630 に答える
0
//Keep in a list of strings with FileA contents 

List<string> linesOfFileA = new List<string>();
string line ;

using (StreamReader sr = new StreamReader(pathToFileA)) 
{
    //read each line of fileA
    line = sr.ReadLine();
    while(line != null)
    {
        linesOfFileA.Add(line) ;
        line = sr.ReadLine();
    }
}
//Now read the contents of FileB

string fileWithoutExtension ;
int posOfExtension ;

using (StreamReader srB = new StreamReader(pathToFileB)) 
{
    //read each line of fileB
    line = sr.ReadLine();
    while(line != null)
    {
        posOfExtension = line.LastIndexOf(".");

        if(posOfExtension < 0)
        {
            fileWithoutExtension = line ;
        }               
        else
        {
            fileWithoutExtension = line.Substring(0,posOfExtension) ;
        }

        //Check to see if the FileA contains file but without Extension
        if(linesOfFileA.Contains(fileWithoutExtension))
        {
            //Store into another list / or execute here
        }
        line = sr.ReadLine();
    }
}

コードの最初の部分では、必要な行数をスキップしていますが、現在表示されている形式のため、比較には影響しません。

于 2013-09-09T13:42:43.303 に答える