将原始部分结构化文本转换为CSV或制表符分隔文档或XML

时间:2012-06-07 18:23:55

标签: csv

我正在帮助非营利组织将现有数据整理到数据库中。该数据包括大约200条记录。他们一直在使用简单的word文档。我正在开始构建原始数据的工作,以便我可以在数据库中输入它。我将数据复制到Textpad中,它做得非常好。那说数据是结构化的,但不是完美的匹配。例如,一些组织有一个网站,有些组织没有。以下是一些表明剩余数据的信息样本:

http://s13.postimage.org/fl84yvc1j/data.png

我创建了一个ERD,它经过了多次修改,并得到了导师的认可。此时我处于ETL(提取,转换,加载)过程

  1. 清理剩余的部分结构但凌乱的数据。
  2. 将其置于Excel可读的doc类型中,并安排到适用的表格中
  3. 创建数据输入SQL脚本。
  4. 运行脚本。
  5. 我已经使用其他一些数据完成了这项工作并且完美无缺。

    清理并将其放入Excel(CSV或Tab Delimited)是我需要指导的地方。或者将它转换为XML更好吗?如果我手动浏览文本文件以确保所有标题(缺少更好的单词)匹配如下:

    http://s13.postimage.org/eil51dzg7/data2.png

    有没有办法转移呢?

    我研究了这个,我很惊讶我找不到任何好的信息。 [更新]我刚刚找到了实际的术语,ETL过程。如果我必须开始重新输入和/或剪切和粘贴,请告诉我。

1 个答案:

答案 0 :(得分:1)

这两个“记录”有很大不同。例如,某些联系人有多个电话号码,而其他联系人只有一个。另外,联系人的数量可以变化。它似乎适用于具有多个表的关系数据库模式。但是,您将很难根据数据布局自动完成填充多个关系表的过程。你要处理多少数据?如果它不是一个巨大的数量,你可能最好做这种半手动,将Textpad文档的部分重新格式化为INSERT语句(使用大量正则表达式搜索和替换),并花一些时间运行查询。

如果它是真正大量的数据,那么您可能希望用您选择的语言编写一个小程序来解析文件并创建一个包含相应插入语句的输出文件来填充所有数据表。

对于健壮的关系数据库,您需要一个至少包含以下表的数据库模式:

Categories (map category names to IDs)
Types (map Group Types to IDs)
Organizations (including category and group type ID, name, addr, objs, activities, meetings, website, email, and an organization ID)
Contacts (one to many referencing org ID, including contact name and a contact ID)
Phone (one to many referencing contact ID, including phone type and phone number)

你可以在没有类型和类别表的情况下离开,但它们可能会证明是有用的,具体取决于数据量以及他们计划在未来如何查询数据(例如,如果在某些时候他们希望找到所有组织特定组类型的特定类别,并且至少有数千个组织,那么额外的表将证明是值得的。)

由于联系人/电话信息似乎非常灵活,您最好将其放入单独的表中 - 否则您必须在主组织表中包含contactN / phoneN / phoneTypeN的列,以获取最大数量可能的联系人/电话,这也会限制可以建立多少联系人/电话关联。

您还可以更好地确保所有其他字段(MEETINGS,EMAIL,...)都不需要多个条目。如果这是可能的话,那么您再次需要选择是否添加其他关系表,或者为组织表添加多个可能的最大字段。