如何将表格变成矩阵?
如果我在文本文件中得到一个表格,例如
- A B 1
- A C 2
- A D 1
- B A 3
- C D 2
- A E 1
- E D 2
- C B 2
- 。 。 。
- 。 。 。
- 。 。 。
我在另一个文本文件中得到了另一个符号列表。 我想将该表转换为 Perl 数据结构,例如:
- _ ADE 。 。 。
- A 0 1 1 。 。 。
- D 1 0 2 。 。 。
- E 1 2 0 。 。 。
- 。 。 。 。 。 。 。
但我只需要一些选定的符号,例如在符号文本中选择了 A、D 和 E,但没有选择 B 和 C。
If I got a table in a text file such like
- A B 1
- A C 2
- A D 1
- B A 3
- C D 2
- A E 1
- E D 2
- C B 2
- . . .
- . . .
- . . .
And I got another symbol list in another text file. I want to transform this table into a Perl data structure like:
- _ A D E . . .
- A 0 1 1 . . .
- D 1 0 2 . . .
- E 1 2 0 . . .
- . . . . . . .
But I only need some selected symbol, for example A, D and E are selected in the symbol text but B and C are not.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
第一个使用数组,第二个使用二维哈希。 第一个应该大致如下:
哈希值如下:
弄清楚如何实现一个问题对我来说大约 75% 的心理斗争。 我不会详细讨论如何打印哈希或数组,因为这很简单,而且我也不完全清楚您希望如何打印它或您想要打印多少。 但是将数组转换为哈希应该看起来有点像这样:
至少,我认为这就是您正在寻找的。 如果您确实想要,可以使用正则表达式,但这对于仅从字符串中提取 3 个值来说可能有点过分了。
编辑:当然,您可以放弃
@list
并直接从文件中组装哈希值。 但这是你的工作,而不是我的。Use an array for the first one and a 2-dimentional hash for the second one. The first one should look roughly like:
And the hash like:
Figuring out how to implement a problem is about 75% of the mental battle for me. I'm not going to go into specifics about how to print the hash or the array, because that's easy and I'm also not entirely clear on how you want it printed or how much you want printed. But converting the array to the hash should look a bit like this:
At least, I think that's what you're looking for. If you really want you could use a regular expression, but that's probably overkill for just extracting 3 values out of a string.
EDIT: Of course, you could forgo the
@list
and just assemble the hash straight from the file. But that's your job to figure out, not mine.你可以用 awk 尝试一下:
awk -f matrix.awk yourfile.txt > newfile.matrix.txt
其中,matrix.awk 是:
you can try this with awk:
awk -f matrix.awk yourfile.txt > newfile.matrix.txt
where matrix.awk is :
另一种方法是制作一个二维数组 -
我对我处理引用的方式不太自豪,但请忍受初学者(请在评论中留下您的建议/更改)。 上面提到的 Chris 的哈希方法听起来容易多了(更不用说打字少了很多)。
Another way to do this would be to make a two-dimensional array -
I am not too proud regarding the way I have handled references but bear with a beginner here (please leave your suggestions/changes in comments). The above mentioned hash method by Chris sounds a lot easier (not to mention a lot less typing).
CPAN 有许多潜在有用的内容。 我将 Data::Table 用于多种目的。 Data::Pivot 看起来也很有前途,但我从未使用过它。
CPAN has many potentially useful suff. I use Data::Table for many purposes. Data::Pivot also looks promising, but I have never used it.