2016-08-18 36 views
1

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

我的数据是这样的:

Text1.txt文件

Bacon|Delicious|salty|lowcalorie 
Sausage|Delicious|salty|highfat 
Chicken|Chicken|chicken|highprotein 

text2.txt文件

Bacon|pork|cheap|crispy 
Sausage|pork|cheap|null 
Chicken|Chicken|moderate|sandwiches 

真的,我想运行一个SQL查询和只是做一个

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

开始与[如何读取CSV文件导入一个.NET数据表(http://stackoverflow.com/q/1050112/ 205233)(以及相关主题)...一旦将数据加载到DataTable中,它应该使您能够使用所需的查询。 – Filburt

+0

...或给Oledb一个像[从CSV文件填充数据集](http://stackoverflow.com/a/16606837/205233)。 – Filburt

回答

1

标记为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)); 
    } 
} 

结果:

Bacon|Delicious|salty|lowcalorie   - Bacon|pork|cheap|crispy 
Sausage|Delicious|salty|highfat   - Sausage|pork|cheap|null 
Chicken|Chicken|chicken|highprotein  - Chicken|Chicken|moderate|sandwiches 
0

纯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 
相关问题