![](/img/trans.png)
[英]SSIS: How to read, omit by matching, and write records from pipe delimited flat file in C#
[英]SSIS Filtering records from flat file
我正在嘗試過濾包含字符串“Order”的平面文件中的記錄,然后將結果導入到 excel 文件中。
我為此使用了條件拆分組件,條件 FINDSTRING(MyColumn,"Order",1) > 0 但它不起作用 - 結果沒有導入任何記錄。
我的平面文件中的行如下所示: 2020-01-01 11:51:00 3459 Order:1398 session:fr34skjdnn32kjsd ID:67889
你知道如何解決這個問題嗎? 預先感謝您的幫助!
下面的代碼只是如何讀取文件的示例。 我需要查看更多的輸入行才能讓代碼處理任何輸入。 我已經解析這樣的文本文件超過 45 年了,並且了解到一行輸入永遠不足以讓這樣的代碼處理所有輸入
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.txt";
static void Main(string[] args)
{
Order order = new Order();
List<Order> orders = order.ReadFile(FILENAME);
}
}
public class Order
{
public DateTime date { get; set; }
public string order { get; set; }
public string session { get; set; }
public string id { get; set; }
public List<Order> ReadFile(string filename)
{
StreamReader reader = new StreamReader(filename);
List<Order> orders = new List<Order>();
string line = "";
while ((line = reader.ReadLine()) != null)
{
Order newOrder = new Order();
orders.Add(newOrder);
string dateStr = line.Substring(0, 24);
newOrder.date = DateTime.ParseExact(dateStr, "yyyy-MM-dd hh:mm:ss ffff", System.Globalization.CultureInfo.InvariantCulture);
string pattern = @"(?'key'[^:]+):(?'value'[^\s]+)";
MatchCollection matches = Regex.Matches(line.Substring(24), pattern);
foreach (Match match in matches.Cast<Match>().AsEnumerable())
{
string key = match.Groups["key"].Value.Trim();
string value = match.Groups["value"].Value.Trim();
switch (key)
{
case "Order" :
newOrder.order = value;
break;
case "session":
newOrder.session = value;
break;
case "ID" :
newOrder.id = value;
break;
}
}
}
return orders;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.