Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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# SSIS从平面文件筛选记录_C#_Ssis_Sql Server Data Tools - Fatal编程技术网

C# SSIS从平面文件筛选记录

C# SSIS从平面文件筛选记录,c#,ssis,sql-server-data-tools,C#,Ssis,Sql Server Data Tools,我正在尝试筛选平面文件中包含字符串“Order”的记录,然后将结果导入excel文件 我为此使用了条件拆分组件和条件查找字符串(MyColumn,“Order”,1)>0,但它不起作用-因此没有导入任何记录 我的平面文件中的行如下所示:2020-01-01 11:51:00 3459顺序:1398会话:fr34skjdn32kjsd ID:67889 你知道怎么解决这个问题吗? 提前感谢您的帮助 下面的代码只是如何读取文件的示例。我需要看到更多的输入行,以使代码能够处理任何输入。我已经解析这样的

我正在尝试筛选平面文件中包含字符串“Order”的记录,然后将结果导入excel文件

我为此使用了条件拆分组件和条件查找字符串(MyColumn,“Order”,1)>0,但它不起作用-因此没有导入任何记录

我的平面文件中的行如下所示:
2020-01-01 11:51:00 3459顺序:1398会话:fr34skjdn32kjsd 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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
使用System.Text.RegularExpressions;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.txt”;
静态void Main(字符串[]参数)
{
订单=新订单();
列表顺序=order.ReadFile(文件名);
}
}
公共阶级秩序
{
公共日期时间日期{get;set;}
公共字符串顺序{get;set;}
公共字符串会话{get;set;}
公共字符串id{get;set;}
公共列表读取文件(字符串文件名)
{
StreamReader=新的StreamReader(文件名);
列表顺序=新列表();
字符串行=”;
而((line=reader.ReadLine())!=null)
{
订单newOrder=新订单();
订单。添加(新订单);
字符串dateStr=line.Substring(0,24);
newOrder.date=DateTime.ParseExact(dateStr,“yyyy-MM-dd hh:MM:ss-ffff”,System.Globalization.CultureInfo.InvariantCulture);
字符串模式=@“(?'key'[^:]+):(?'value'[^\s]+)”;
MatchCollection matches=Regex.matches(行子字符串(24),模式);
foreach(matches.Cast().AsEnumerable()中的匹配)
{
string key=match.Groups[“key”].Value.Trim();
字符串值=match.Groups[“value”].value.Trim();
开关(钥匙)
{
案例“订单”:
newOrder.order=值;
打破
案例“会议”:
newOrder.session=值;
打破
案例“ID”:
newOrder.id=值;
打破
}
}
}
退货订单;
}
}
}

在我的平面文件中,单词“Order”主要出现在冒号前面或引号中,例如:row1:2020-01-01 11:51:00 3459订单:1398会话:fr34skjdkjhu7jsd ID:67889 row2:2020-01-01 11:51:00 3459“订单”1398会话:fr34skjdn32kjsd ID:67869,某些情况如下:row3:2020-01-01 11:51:00 3459订单1398会话:fr34jhbukybhj7kjsd ID:67879。所以我们只有3个案例:订单:,“订单”,“订单”。有很多没有“Order”的行,但我希望结果行中只有这个单词。这看起来像是手工类型的数据,有很多不一致之处,为什么很难解析呢。我需要看到更多的数据行才能完成正确的工作。这看起来像是我在大学里做的最后一个项目,教授在输入中有打字错误,使项目具有挑战性。我们不得不在穿孔卡片上写代码,结果用FORTRAN语言写了500多张卡片,而且废纸篓里的卡片比最终项目中的还要多。