【发布时间】:2012-01-13 03:50:43
【问题描述】:
我是 Perl 的新手。我需要解析一个制表符分隔的文本文件。例如:
From name To name Timestamp Interaction
a b Dec 2 06:40:23 IST 2000 comment
c d Dec 1 10:40:23 IST 2001 like
e a Dec 1 16:03:01 IST 2000 follow
b c Dec 2 07:50:29 IST 2002 share
a c Dec 2 08:50:29 IST 2001 comment
c a Dec 11 12:40:23 IST 2008 like
e c Dec 2 07:50:29 IST 2000 like
c b Dec 11 12:40:23 IST 2008 follow
b a Dec 2 08:50:29 IST 2001 share
解析后,我需要根据用户交互创建组。在这个例子中
a<->b
b<->a
c<->a
a<->c
b<->c
c<->b
为此,我们可以创建一个组。我们需要显示组列表。 我需要一些关于如何解析文件和表单组的指示?
编辑 约束-> 创建组至少需要 3 个用户。 交互只不过是两个用户之间进行的一些通信。什么沟通都无所谓
我的解决方法是
我们删除了用户之间的重复交互。例如“ab like”,如果存在“ab follow”,那么我们删除这一行。
-
创建存储交互两个用户的二维数组,即
To Name a b c dFrom Namea X <> <> X b <> X <> X c <> <> X X d X <> X XX= 表示没有交互 = 表示交互
在这种方法中,我们从第一行开始,即“a”用户检查“b”。如果“a”与“b”交互,那么我们执行反向操作,即“b”与“a”交互。对每一列执行相同的步骤。
但这种方法取决于用户数量。如果存在 1000 个用户,那么我们必须创建 1000 X 1000 矩阵。有没有办法解决这个问题
我已添加示例输入
a c Dec 2 06:40:23 IST 2000 comment
f g Dec 2 06:40:23 IST 2009 like
c a Dec 2 06:40:23 IST 2009 like
g h Dec 2 06:40:23 IST 2008 like
a d Dec 2 06:40:23 IST 2008 like
r t Dec 2 06:40:23 IST 2007 share
d a Dec 2 06:40:23 IST 2007 share
t u Dec 2 06:40:23 IST 2006 follow
a e Dec 2 06:40:23 IST 2006 follow
k l Dec 2 06:40:23 IST 2009 like
e a Dec 2 06:40:23 IST 2009 like
j k Dec 2 06:40:23 IST 2003 like
c d Dec 2 06:40:23 IST 2003 like
l j Dec 2 06:40:23 IST 2002 like
d c Dec 2 06:40:23 IST 2002 like
m n Dec 2 06:40:23 IST 2005 like
c e Dec 2 06:40:23 IST 2005 like
m l Dec 2 06:40:23 IST 2011 like
e c Dec 2 06:40:23 IST 2011 like
h j Dec 2 06:40:23 IST 2010 like
d e Dec 2 06:40:23 IST 2010 like
o p Dec 2 06:40:23 IST 2009 like
e d Dec 2 06:40:23 IST 2009 like
p q Dec 2 06:40:23 IST 2000 comment
q p Dec 2 06:40:23 IST 2009 like
a p Dec 2 06:40:23 IST 2008 like
p a Dec 2 06:40:23 IST 2007 share
l p Dec 2 06:40:23 IST 2003 like
j l Dec 2 06:40:23 IST 2002 like
t r Dec 2 06:40:23 IST 2000 comment
r h Dec 2 06:40:23 IST 2009 like
j f Dec 2 06:40:23 IST 2008 like
g d Dec 2 06:40:23 IST 2007 share
w q Dec 2 06:40:23 IST 2003 like
o y Dec 2 06:40:23 IST 2002 like
x y Dec 2 06:40:23 IST 2000 comment
y x Dec 2 06:40:23 IST 2009 like
x z Dec 2 06:40:23 IST 2008 like
z x Dec 2 06:40:23 IST 2007 share
y z Dec 2 06:40:23 IST 2003 like
z y Dec 2 06:40:23 IST 2002 like
输出应该是:
(a,c, d, e)
(x,y,z)
【问题讨论】:
-
那里至少存在三个不同的问题(读取文件、从中提取数据、构建数据)。哪一个给你带来了问题?
-
你试过什么?它怎么没有像你预期的那样工作?你被困在哪里了?
-
@Quentin:感谢您的快速回复。我被困在结构化数据上。
-
@sarnold 我是 perl 新手。如何处理用户和表单组的交互。
-
您是否遇到了 Perl 问题或数据本身的结构化问题?我看不到您想要的数据的详细结构。您想创建“基于用户交互的组”,交互显示在您的示例结果中。你的数据有'from'和'to',但你的输出有'ab',这对我来说意味着'a'与'b'进行交互,'b'对'a'做同样的事情,但是a ->b 是评论,a