Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按指定值联接两个(或多个)分隔的文本文件_C#_.net - Fatal编程技术网

C# 按指定值联接两个(或多个)分隔的文本文件

C# 按指定值联接两个(或多个)分隔的文本文件,c#,.net,C#,.net,我正试图找出在一个公共值上连接(至少)两个管道分隔文本文件的最佳方法,类似于SQL的连接。我会将这两个文件加载到列表中,然后拆分字符串吗?我有点困了 我的数据如下: Text1.txt文件 text2.txt文件 真的,我想运行一个SQL查询,然后做一个 Select * from Text1 FULL OUTER JOIN text2 ON text1.firstColumn=table2.firstColumn; 纯T-SQL解决方案如下所示: CREATE TABLE #TEXTFILE

我正试图找出在一个公共值上连接(至少)两个管道分隔文本文件的最佳方法,类似于SQL的连接。我会将这两个文件加载到列表中,然后拆分字符串吗?我有点困了

我的数据如下:

Text1.txt文件

text2.txt文件

真的,我想运行一个SQL查询,然后做一个

Select * from Text1
FULL OUTER JOIN text2
ON text1.firstColumn=table2.firstColumn;

纯T-SQL解决方案如下所示:

CREATE TABLE #TEXTFILE_1(
    FIELD1 varchar(100) ,
    FIELD2 varchar(100) ,
    FIELD3 varchar(100) ,
    FIELD4 varchar(100));

BULK INSERT #TEXTFILE_1 FROM 'C:\FILE1.TXT'
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR =' \n')

CREATE TABLE #TEXTFILE_2(
    FIELD1 varchar(100) ,
    FIELD2 varchar(100) ,
    FIELD3 varchar(100) ,
    FIELD4 varchar(100));

BULK INSERT #TEXTFILE_2 FROM 'C:\FILE2.TXT'
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR =' \n')


SELECT * FROM #TEXTFILE_1 text1
FULL OUTER JOIN #TEXTFILE_2 text2
ON text1.FIELD1=text2.FIELD1

DROP TABLE #TEXTFILE_1
DROP TABLE #TEXTFILE_2

用C#?:-)标记此问题

我可以看看这个吗?与LINQ的完全外部连接:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static IEnumerable<string[]> ReadTabFile(string fileName, char delimiter)
{
  return File.ReadLines(fileName).Select(line => line.Split(delimiter));
}

static void Main()
{
  string[][] lines1 = ReadTabFile("text1.txt", '|').ToArray();
  string[][] lines2 = ReadTabFile("text2.txt", '|').ToArray();

  var leftOuterJoin = from line1 in lines1
                      join line2 in lines2
                      on line1.FirstOrDefault() equals line2.FirstOrDefault()
                      select new
                      {
                        line1,
                        line2
                      };

  var rightOuterJoin = from line2 in lines2
                       join line1 in lines1
                       on line2.FirstOrDefault() equals line1.FirstOrDefault()
                       select new
                       {
                         line1,
                         line2
                       };

  var fullOuterJoin = leftOuterJoin.Union(rightOuterJoin);

  foreach (var test in fullOuterJoin)
  {
    Console.WriteLine("{0,-40} - {1,-40}", string.Join("|", test.line1), string.Join("|", test.line2));
  }
}

从(和相关主题)开始。。。一旦您将数据加载到DataTable中,它应该使您能够使用所需的查询。。。。或者给Oledb一次类似的尝试。
CREATE TABLE #TEXTFILE_1(
    FIELD1 varchar(100) ,
    FIELD2 varchar(100) ,
    FIELD3 varchar(100) ,
    FIELD4 varchar(100));

BULK INSERT #TEXTFILE_1 FROM 'C:\FILE1.TXT'
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR =' \n')

CREATE TABLE #TEXTFILE_2(
    FIELD1 varchar(100) ,
    FIELD2 varchar(100) ,
    FIELD3 varchar(100) ,
    FIELD4 varchar(100));

BULK INSERT #TEXTFILE_2 FROM 'C:\FILE2.TXT'
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR =' \n')


SELECT * FROM #TEXTFILE_1 text1
FULL OUTER JOIN #TEXTFILE_2 text2
ON text1.FIELD1=text2.FIELD1

DROP TABLE #TEXTFILE_1
DROP TABLE #TEXTFILE_2
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

static IEnumerable<string[]> ReadTabFile(string fileName, char delimiter)
{
  return File.ReadLines(fileName).Select(line => line.Split(delimiter));
}

static void Main()
{
  string[][] lines1 = ReadTabFile("text1.txt", '|').ToArray();
  string[][] lines2 = ReadTabFile("text2.txt", '|').ToArray();

  var leftOuterJoin = from line1 in lines1
                      join line2 in lines2
                      on line1.FirstOrDefault() equals line2.FirstOrDefault()
                      select new
                      {
                        line1,
                        line2
                      };

  var rightOuterJoin = from line2 in lines2
                       join line1 in lines1
                       on line2.FirstOrDefault() equals line1.FirstOrDefault()
                       select new
                       {
                         line1,
                         line2
                       };

  var fullOuterJoin = leftOuterJoin.Union(rightOuterJoin);

  foreach (var test in fullOuterJoin)
  {
    Console.WriteLine("{0,-40} - {1,-40}", string.Join("|", test.line1), string.Join("|", test.line2));
  }
}
Bacon|Delicious|salty|lowcalorie         - Bacon|pork|cheap|crispy
Sausage|Delicious|salty|highfat          - Sausage|pork|cheap|null
Chicken|Chicken|chicken|highprotein      - Chicken|Chicken|moderate|sandwiches