2016-08-18 47 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 
相關問題