需要对一系列没有键值的数字进行分组 - Ruby、Python、Javascript
Need to group a series of numbers with no key value - Ruby, Python, Javascript
这是我的问题。我有一个大文件,其中包含一条付款记录以及与其相关联的发票。该文件是一个平面文件,其中包含我可以处理的基于位置的条目,但是对其进行排序的能力让我疲惫的大脑感到困惑。
我相信这很简单,所以请多关照。
此处简单显示文件结构:
600060006600 payment details
700010001000 invoice details
700010001001 invoice details
600060006680 payment details
700010001002 invoice details
600060006690 payment details
700010001004 invoice details
700010001005 invoice details
700010001006 invoice details
有时一笔付款会有一张发票,有时不止一张。 6 始终是付款,7 始终是发票。
限制为脚本语言的核心库(ruby、python 或 javascript)是必需的,因为我们正在使用的工具集,否则我会敲打这个东西现在出来了。
简而言之,无论您选择哪种语言,您尝试做的事情看起来都像 ETL。以某种格式在某处获取一些记录,并将它们以另一种格式放在其他地方的过程,可能是在进行一些转换之后。
这是您想要做的事情的要点:
- 遍历文件,
- 获取每个文本行,并将其解析为 dictionary/object/record(在您的示例中,您遇到的第一个 space 是唯一的分隔符)
- 将 additions/transformations 添加到您的记录中(例如获取 ID,对其应用一些逻辑来推断类型)
- 可能将其放回其他一些数据存储中,无论是文件还是数据库还是其他。
至于如何用 X 语言完成,实现各不相同,这似乎超出了这个问题的范围。我将使用 Ruby 给出示例,但这只是因为我对它很满意table,它可以用多种语言完成。
首先,您可能需要阅读不同语言的 CSV 库,它们提供了一些关于此类任务的示例。例如,这里是 Ruby 的 CSV。像 Postgres 这样的 DBMS 也能够加载 CSV 文件。 (如果您使用的是 Postgresql,pgfutter 甚至会创建您的 table 定义并导入您的 CSV)
至于用什么样的工具,要看你要处理多少条记录,以及转换的复杂程度。如果你只有几个(比如任意 < 10k),制作对象并迭代就可以了,并且在几秒钟内完成。而如果你有很多(比如> 1M),你可能想在数据库查询中进行(除非你不能使用数据库)。
DBMS 通常在大型数据集上性能更高,并且允许您相当轻松地执行诸如联接之类的操作,但是如果您必须执行更复杂的转换,则像 Ruby 这样的语言会更具表现力。 (我不想在 SQL 中编写算法。)
如果两者都需要?您可以使用 ORM(例如 Activerecord 或 Squeel)混合使用两者。 (或者任何你喜欢table的东西,真的)然后你可以使用你的语言来做它需要的事情并与数据库交互。
选择最适合工作的工具。并提防过早的优化!
这是我的问题。我有一个大文件,其中包含一条付款记录以及与其相关联的发票。该文件是一个平面文件,其中包含我可以处理的基于位置的条目,但是对其进行排序的能力让我疲惫的大脑感到困惑。
我相信这很简单,所以请多关照。
此处简单显示文件结构:
600060006600 payment details
700010001000 invoice details
700010001001 invoice details
600060006680 payment details
700010001002 invoice details
600060006690 payment details
700010001004 invoice details
700010001005 invoice details
700010001006 invoice details
有时一笔付款会有一张发票,有时不止一张。 6 始终是付款,7 始终是发票。
限制为脚本语言的核心库(ruby、python 或 javascript)是必需的,因为我们正在使用的工具集,否则我会敲打这个东西现在出来了。
简而言之,无论您选择哪种语言,您尝试做的事情看起来都像 ETL。以某种格式在某处获取一些记录,并将它们以另一种格式放在其他地方的过程,可能是在进行一些转换之后。
这是您想要做的事情的要点:
- 遍历文件,
- 获取每个文本行,并将其解析为 dictionary/object/record(在您的示例中,您遇到的第一个 space 是唯一的分隔符)
- 将 additions/transformations 添加到您的记录中(例如获取 ID,对其应用一些逻辑来推断类型)
- 可能将其放回其他一些数据存储中,无论是文件还是数据库还是其他。
至于如何用 X 语言完成,实现各不相同,这似乎超出了这个问题的范围。我将使用 Ruby 给出示例,但这只是因为我对它很满意table,它可以用多种语言完成。
首先,您可能需要阅读不同语言的 CSV 库,它们提供了一些关于此类任务的示例。例如,这里是 Ruby 的 CSV。像 Postgres 这样的 DBMS 也能够加载 CSV 文件。 (如果您使用的是 Postgresql,pgfutter 甚至会创建您的 table 定义并导入您的 CSV)
至于用什么样的工具,要看你要处理多少条记录,以及转换的复杂程度。如果你只有几个(比如任意 < 10k),制作对象并迭代就可以了,并且在几秒钟内完成。而如果你有很多(比如> 1M),你可能想在数据库查询中进行(除非你不能使用数据库)。
DBMS 通常在大型数据集上性能更高,并且允许您相当轻松地执行诸如联接之类的操作,但是如果您必须执行更复杂的转换,则像 Ruby 这样的语言会更具表现力。 (我不想在 SQL 中编写算法。)
如果两者都需要?您可以使用 ORM(例如 Activerecord 或 Squeel)混合使用两者。 (或者任何你喜欢table的东西,真的)然后你可以使用你的语言来做它需要的事情并与数据库交互。
选择最适合工作的工具。并提防过早的优化!