直接通过文件系统(SSIS)将TXT文件转换为CSV文件读取
我被困在这种情况下,我真的不知道该怎么办 我正在努力做到这一点: 读取目录中的“latest”(最新日期和较高的小时数)文件,替换 通过添加“逗号”分隔,并将文件扩展名:从TXT更改为 CSV 我不想执行查询并获取所有信息,我只想转换直接存储在目录中的文件 我的TXT如下所示:直接通过文件系统(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
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是一个用户变量,指向 目录
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是一个用户变量,指向 目录
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。嘿,朋友,非常感谢你的回复!是的,为了得到最新的文件,我也这么做了,但当我试图处理空记录时,问题就来了。我试了很多,但没有成功。嘿,朋友,非常感谢你的回复!是的,为了得到最新的文件,我也这么做了,但当我试图处理空记录时,问题就来了。一直在尝试,但没有成功。嘿,朋友,谢谢你的回复!我不完全理解你是如何处理空记录的,看看我的帖子。嘿,朋友,谢谢你的回复!我不完全理解你是如何处理空记录的,看看我的线程。