Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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
Powershell 转换文件的最佳文件解析解决方案是什么?_Powershell_Ironpython_Etl_Fileparsing - Fatal编程技术网

Powershell 转换文件的最佳文件解析解决方案是什么?

Powershell 转换文件的最佳文件解析解决方案是什么?,powershell,ironpython,etl,fileparsing,Powershell,Ironpython,Etl,Fileparsing,我正在为我们的企业导入例程寻找自定义文件解析的最佳解决方案。我想基本上把一个文件格式改成标准文件格式,并有一个例程将数据导入数据库。我需要能够为每个客户创建自定义脚本,因为很难让客户遵守标准或模板格式。到目前为止,我已经看过PowerShell和Iron Python,但我不确定这是我想要走的路线。我还研究了一些工具,比如Talend,这是一种拖放式工具,它可能会也可能不会提供我想要的灵活性。我们是一家.NET商店,在过去已经创建了自定义代码来实现这一点,但我需要一些更快的东西来创建自定义解析函

我正在为我们的企业导入例程寻找自定义文件解析的最佳解决方案。我想基本上把一个文件格式改成标准文件格式,并有一个例程将数据导入数据库。我需要能够为每个客户创建自定义脚本,因为很难让客户遵守标准或模板格式。到目前为止,我已经看过PowerShell和Iron Python,但我不确定这是我想要走的路线。我还研究了一些工具,比如Talend,这是一种拖放式工具,它可能会也可能不会提供我想要的灵活性。我们是一家.NET商店,在过去已经创建了自定义代码来实现这一点,但我需要一些更快的东西来创建自定义解析函数,然后在每次获得新的文件格式时编写自定义解析函数

Python非常适合做这种事情。这就是为什么我们使用。每一次新的客户转移都是一次新的冒险,Python为我们提供了快速响应的灵活性


编辑。所有读取文件的python脚本都是“自定义文件解析器”。没有一个实际的例子,提供一个详细的例子是不明智的

with open( "some file", "r" ) as source:
    for line in source:
        process( line )
这就是“自定义文件解析器”的全部功能。如果您正在解析.csv或.xml文件,那么Python有相应的模块。如果您正在解析固定格式的文件,则应该使用字符串切片操作。如果您正在解析其他文件(X12?JSON?YAML?),则需要适当的解析器

选项卡Delim

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    record = RecordLayout( aLine.split('\t') )
    ...
from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    fields = ( aLine[:10], aLine[10:20], aLine[20:30], ... )
    record = RecordLayout( fields )
    ...
固定布局

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    record = RecordLayout( aLine.split('\t') )
    ...
from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    fields = ( aLine[:10], aLine[10:20], aLine[20:30], ... )
    record = RecordLayout( fields )
    ...

根据您的工作的复杂性和可变性,您应该考虑像SSIS(SQLServer集成服务)这样的ETL工具。

我们所遇到的一些文件很难解析。除了标准文件导入之外,我们还可以使用SSIS附带的任何特殊工具吗?请提供有关格式的更多详细信息。一般来说,SSIS允许您解析几乎任何格式—固定字段、分隔符、XML等。如果需要,编写适合SSIS的自己的解析器相当容易,因此只需要自定义解析函数。我不知道您可以在SSIS中使用自定义解析函数。我将不得不进一步调查此事。谢谢我想买一个像Advanced ETL Processor Ent这样的工具。你可以为SSI创建自定义组件——或者纯粹在代码中,或者在脚本组件中。在任何情况下,编写一个自定义源代码转换来进行解析,并将结果作为新的输出列返回。这是SQL Server 2005或2008标准版或企业版附带的一个很棒的ETL工具。您能给我看一个用于解析的示例脚本吗?我没有找到任何显示自定义文件解析的优秀示例。@Ryan:所有读取文件的python程序都是“自定义文件解析器”。您有XML、CSV、JSON、YAML和其他一些的内置解析器。您可以下载XLS电子表格的解析器。因为您的问题只是说“自定义”,所以尝试提供任何代码都是不明智的。您必须提供一个示例文件。我们收到的文件有时格式奇怪,可能需要我们进行一些自定义解析,以从中获取所需的数据。它们在大多数情况下是以制表符分隔的,但有时甚至不会使用以制表符分隔的设置加载SSI。下面是一个示例,说明我们现在如何在加载的一个文件上使用C#导入解析。string lname=line.Substring(10,20).Trim();string fname=line.Substring(30,10.Trim();string mi=line.Substring(40,1.Trim();