2012-02-03 48 views
1

我已经给出了一堆联系人的CSV格式如下所示:合并从CSV多行到一行

companyID, companyName, contactId, firstName, lastName, email 

,并要求所有从单一公司联系人合并为一个单行像这样

companyID, companyName, contactId, firstName, lastName, email, companyName, contactId, firstName, lastName, email... 

至于他们为什么要这样的数据,我不知道。

只要它是免费提供的,我就没有被绑定到任何特定的技术,并且我得到了正确的结果。你会如何实现这一目标?

到目前为止,我尝试导入到postgres表中并尝试各种连接和递归查询,但我无法完全使用正确的语法。

+0

什么是后端?当你写在“CSV格式的联系人”是在一列或一个文件?这是否必须在SQL中,还是可以使用客户端软件来解决?你可以定位哪些客户端软件? – 2012-02-03 18:03:11

+0

我认为处理这个问题的方法是在应用程序中,而不是w/sql。只需获取数据并写入文件,只需将每个公司的所有数据保存在同一行上即可。 – 2012-02-03 18:06:14

+0

不会为此烦恼。不是我的专业领域,但Perl将是一个突出的候选人,可能在一行中... – 2012-02-03 18:07:13

回答

1

如果您有机会获得在Windows的Unix/Linux或Cygwin的话,可以使用

sort csvFileName | awk -F, 'BEGIN {last="";} {if (last == $1) { printf ","; } else { printf "\n"; }; printf $0; last =$1; }' 

这将重复CompanyID各次,但你可以改变的printf $ 0到输出列超过$ 1或你其他可以发布进程来删除这些列。

+0

谢谢,这看起来不错。 – 2012-02-03 19:16:22

0

这是一个潜在的解决方案:

  1. 创建联系人类来保存所有信息的一个接触。
  2. 创建一个公司类来保存一个公司的信息。
  3. 创建一个Map<Company, List<Contact>>将联系人映射到公司。
  4. 阅读文件,填写公司和联系人对象以及每个公司的List<Contact>
  5. 遍历地图的keySet。对于每个地图条目,输出公司和联系信息。

OpenCSV可能是有帮助的。

如果你没有找到一个开源的CSV阅读器,您可以拆分根据逗号(,)线并符合本公司及联系人类,只需要实现类似public String toCSV()类输出对象为CSV。

+0

这是更复杂,然后它需要,无需OOP here – 2012-02-03 18:10:54