直接通过文件系统(SSIS)将TXT文件转换为CSV文件读取

直接通过文件系统(SSIS)将TXT文件转换为CSV文件读取,csv,ssis,filesystems,text-files,Csv,Ssis,Filesystems,Text Files,我被困在这种情况下,我真的不知道该怎么办 我正在努力做到这一点: 读取目录中的“latest”(最新日期和较高的小时数)文件,替换 通过添加“逗号”分隔,并将文件扩展名:从TXT更改为 CSV 我不想执行查询并获取所有信息,我只想转换直接存储在目录中的文件 我的TXT如下所示: POL-45345334234 -963747 -963747 $ KAN 98 HU 554534 2179007 2021 20210127 2021

我被困在这种情况下,我真的不知道该怎么办

我正在努力做到这一点:

读取目录中的“latest”(最新日期和较高的小时数)文件,替换 通过添加“逗号”分隔,并将文件扩展名:从TXT更改为 CSV

我不想执行查询并获取所有信息,我只想转换直接存储在目录中的文件

我的TXT如下所示:

POL-45345334234       -963747       -963747 $   KAN  98   HU 554534     2179007             2021 20210127 20210127       -963747              
POL-99345552342        628308        423818 $   KAN  98   JU 999898     1402048             2021 20190104 20190208        423818   30        0
POL-45345334234,-963747,-963747,$,KAN,98,HU,554534,2179007,2021,20210127,20210127,-963747,,              
POL-99345552342,628308,423818,$,KAN,98,JU,999898,1402048,2021,20190104,20190208,423818,30,0
我想去掉空格,得到这样的东西:

POL-45345334234       -963747       -963747 $   KAN  98   HU 554534     2179007             2021 20210127 20210127       -963747              
POL-99345552342        628308        423818 $   KAN  98   JU 999898     1402048             2021 20190104 20190208        423818   30        0
POL-45345334234,-963747,-963747,$,KAN,98,HU,554534,2179007,2021,20210127,20210127,-963747,,              
POL-99345552342,628308,423818,$,KAN,98,JU,999898,1402048,2021,20190104,20190208,423818,30,0


如何使用SSIS实现类似的功能?我在这里迷了路

请阅读您目录中的最新文件:

SELECT  REPLACE(REPLACE(REPLACE([Column 0],' ','<>'),'><',''),'<>',' ')
  FROM yourStagingTable
REPLACE([Column 0 ]," ",",")
创建一个
C#脚本任务

public void Main()
         {

      // TODO: Add your code here
             var directory= new DirectoryInfo(Dts.Variables["User::VarFolderPath"].Value.ToString());

            FileInfo[] files = directory.GetFiles();
            DateTime lastModified = DateTime.MinValue;

             foreach (FileInfo file in files)
            {
                if (file.LastWriteTime > lastModified)
                {
                    lastModified = file.LastWriteTime;
                    Dts.Variables["User::VarFileName"].Value = file.ToString();
                }
            }

             MessageBox.Show(Dts.Variables["User::VarFileName"].Value.ToString());


             Dts.TaskResult = (int)ScriptResults.Success;
         }
其中:

  • VarFolderPath是指向文件夹的用户变量

  • VarFileName是一个用户变量,指向 目录

创建一个暂存表,以便在脚本任务完成后从文件中获取数据:您可以将行的内容存储在名为[column 0]的列中

考虑按一个空间对顺序空间进行中继:

SELECT  REPLACE(REPLACE(REPLACE([Column 0],' ','<>'),'><',''),'<>',' ')
  FROM yourStagingTable
REPLACE([Column 0 ]," ",",")

读取目录中的最新文件:

SELECT  REPLACE(REPLACE(REPLACE([Column 0],' ','<>'),'><',''),'<>',' ')
  FROM yourStagingTable
REPLACE([Column 0 ]," ",",")
创建一个
C#脚本任务

public void Main()
         {

      // TODO: Add your code here
             var directory= new DirectoryInfo(Dts.Variables["User::VarFolderPath"].Value.ToString());

            FileInfo[] files = directory.GetFiles();
            DateTime lastModified = DateTime.MinValue;

             foreach (FileInfo file in files)
            {
                if (file.LastWriteTime > lastModified)
                {
                    lastModified = file.LastWriteTime;
                    Dts.Variables["User::VarFileName"].Value = file.ToString();
                }
            }

             MessageBox.Show(Dts.Variables["User::VarFileName"].Value.ToString());


             Dts.TaskResult = (int)ScriptResults.Success;
         }
其中:

  • VarFolderPath是指向文件夹的用户变量

  • VarFileName是一个用户变量,指向 目录

创建一个暂存表,以便在脚本任务完成后从文件中获取数据:您可以将行的内容存储在名为[column 0]的列中

考虑按一个空间对顺序空间进行中继:

SELECT  REPLACE(REPLACE(REPLACE([Column 0],' ','<>'),'><',''),'<>',' ')
  FROM yourStagingTable
REPLACE([Column 0 ]," ",",")

此代码获取最新的文本(.txt)文件。但是,用逗号替换连续空格会遇到问题。具体来说,对于空值,如第1行中的示例

使用脚本任务

添加以下名称空间:

using System.IO;
using System.Linq;
添加此代码:

        string filename = new DirectoryInfo(@"D:\").GetFiles()
                               .Where(e => e.Extension.ToLower() == ".txt")
                               .OrderByDescending(d => d.LastWriteTime)
                               .Select(f => f.FullName)
                               .First();
我将为您提供替换所有空格的代码,但它不处理空记录:

添加命名空间:

System.Text.RegularExpressions;
在上面添加代码:

       using (StreamWriter sw = new StreamWriter(@"D:\output.csv"))
        {
            using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                using (var sr = new StreamReader(fs, Encoding.UTF8))
                {
                    string line = String.Empty;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string newline = Regex.Replace(line, @"\s+", ",");
                        sw.WriteLine(newline);
                    }
                }
            }
        }

此代码获取最新的文本(.txt)文件。但是,用逗号替换连续空格会遇到问题。具体来说,对于空值,如第1行中的示例

使用脚本任务

添加以下名称空间:

using System.IO;
using System.Linq;
添加此代码:

        string filename = new DirectoryInfo(@"D:\").GetFiles()
                               .Where(e => e.Extension.ToLower() == ".txt")
                               .OrderByDescending(d => d.LastWriteTime)
                               .Select(f => f.FullName)
                               .First();
我将为您提供替换所有空格的代码,但它不处理空记录:

添加命名空间:

System.Text.RegularExpressions;
在上面添加代码:

       using (StreamWriter sw = new StreamWriter(@"D:\output.csv"))
        {
            using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                using (var sr = new StreamReader(fs, Encoding.UTF8))
                {
                    string line = String.Empty;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string newline = Regex.Replace(line, @"\s+", ",");
                        sw.WriteLine(newline);
                    }
                }
            }
        }

看起来像被我骗了嘿,伙计,你好吗?。我不这么认为,有点相关,但一点也不:)我不确定,但我认为你的来源是一个固定宽度的文件。你可以很容易地用SSIS读取它,然后像那样处理它或者将它写入CSV。看起来像是对meHey朋友的复制,你好吗?。我不这么认为,有点相关,但一点也不:)我不确定,但我认为你的来源是一个固定宽度的文件。你可以很容易地用SSIS阅读它,或者像那样处理它,或者将它写入CSV。嘿,朋友,非常感谢你的回复!是的,为了得到最新的文件,我也这么做了,但当我试图处理空记录时,问题就来了。我试了很多,但没有成功。嘿,朋友,非常感谢你的回复!是的,为了得到最新的文件,我也这么做了,但当我试图处理空记录时,问题就来了。一直在尝试,但没有成功。嘿,朋友,谢谢你的回复!我不完全理解你是如何处理空记录的,看看我的帖子。嘿,朋友,谢谢你的回复!我不完全理解你是如何处理空记录的,看看我的线程。