- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 TSV 数据
ID Name Email
1 test test@email.com
321 stan stan@nowhere.net
@entities[0]<Name> eq "test";
@entities[1]<Email> eq "stan@nowhere.net";
use v6;
grammar Parser {
token TOP { <headerRow><valueRow>+ }
token headerRow { [\s*<header>]+\n }
token header { \S+ }
token valueRow { [\s*<value>]+\n? }
token value { \S+ }
}
my $dat = q:to/EOF/;
ID Name Email
1 test test@email.com
321 stan stan@nowhere.net
EOF
say Parser.parse($dat);
Nil
.我想我误解了 raku 中关于正则表达式的一些基本知识。
最佳答案
可能主要是因为 \s
匹配水平和垂直空间。要仅匹配水平空间,请使用 \h
, 并仅匹配垂直空间,\v
.
我提出的一个小建议是避免在 token 中包含换行符。您可能还想使用交替运算符 %
或 %%
,因为它们是为处理此类工作而设计的:
grammar Parser {
token TOP {
<headerRow> \n
<valueRow>+ %% \n
}
token headerRow { <.ws>* %% <header> }
token valueRow { <.ws>* %% <value> }
token header { \S+ }
token value { \S+ }
token ws { \h* }
}
Parser.parse($dat)
的结果原因如下:
「ID Name Email
1 test test@email.com
321 stan stan@nowhere.net
」
headerRow => 「ID Name Email」
header => 「ID」
header => 「Name」
header => 「Email」
valueRow => 「 1 test test@email.com」
value => 「1」
value => 「test」
value => 「test@email.com」
valueRow => 「 321 stan stan@nowhere.net」
value => 「321」
value => 「stan」
value => 「stan@nowhere.net」
valueRow => 「」
value
/
header
除了字符串化之外不需要特殊处理,可以忽略)。有一些更有创意/紧凑的方法来处理你的处理,但我会用一种相当基本的方法来说明。这是我们的类(class):
class ParserActions {
method headerRow ($/) { ... }
method valueRow ($/) { ... }
method TOP ($/) { ... }
}
($/)
这是正则表达式匹配变量。所以现在,让我们问问我们想要从每个 token 中获得什么信息。在标题行中,我们希望每个标题值都排成一行。所以:
method headerRow ($/) {
my @headers = $<header>.map: *.Str
make @headers;
}
Positional
,因此我们还可以使用
$<header>[0]
访问每个单独的 header 匹配项,
$<header>[1]
,等等。但那些是匹配对象,所以我们只是快速地将它们字符串化。
make
命令允许其他 token 访问我们创建的这个特殊数据。
$<value>
token 是我们关心的。
method valueRow ($/) {
my @values = $<value>.map: *.Str
make @values;
}
method TOP ($/) {
my @entries;
my @headers = $<headerRow>.made;
my @rows = $<valueRow>.map: *.made;
for @rows -> @values {
my %entry = flat @headers Z @values;
@entries.push: %entry;
}
make @entries;
}
headerRow()
中处理的内容。和
valueRow()
:您使用
.made
方法。因为有多个valueRows,要得到它们的每一个
made
值,我们需要做一个映射(在这种情况下,我倾向于编写我的语法以在语法中简单地包含
<header><data>
,并将数据定义为多行,但这很简单,还不错)。
for
中执行此操作。环形。
flat @x Z @y
只是插入元素,散列分配就是我们的意思,但还有其他方法可以让数组以您想要的散列形式存在。
make
它,然后它将在
made
中可用解析:
say Parser.parse($dat, :actions(ParserActions)).made
-> [{Email => test@email.com, ID => 1, Name => test} {Email => stan@nowhere.net, ID => 321, Name => stan} {}]
sub parse-tsv($tsv) {
return Parser.parse($tsv, :actions(ParserActions)).made
}
my @entries = parse-tsv($dat);
say @entries[0]<Name>; # test
say @entries[1]<Email>; # stan@nowhere.net
关于csv - 如何定义 Raku 语法来解析 TSV 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510667/
List list=null; ICsvListReader listReader = null; listReader = new CsvListReader(new FileReader(new
简短而甜蜜:如何从 R 导出 TSV/CSV? write.table/write.csv几乎可以工作: test <- data.frame(a = 2 : 4, b = 3 : 5) write.
我刚开始使用 Python 的 csv 模块,但由于缺少转义字符和奇怪的数据,我不断遇到无法解析的问题。以下是导致它抓取多行并中断(制表符分隔值)的两个示例: B 2885192 "Some inpu
我已获得一个 TSV 文件。我正在使用 getchar() 函数阅读它,并在运行函数时在命令行中输入 program = MAX_LENGTH_OF_STRINGS) {
我有一个 .tsv,我需要找出特定列中的频率变量并按降序排列该数据。我在 c 中运行一个脚本,该脚本下载一个缓冲区并将其保存到一个 .tsv 文件中,该文件带有一个名称的日期戳,位于与我的代码相同的目
我有一个存储有向图的文件。每行表示为 node1 TAB node2 TAB权重 我想找到节点集。有没有更好的方式获得工会?我当前的解决方案涉及创建临时文件: cut -f1 input_graph
我有一个 5GB+ TSV 文件。我需要可视化它包含的数据,但 Excel 无法打开文件(显然太大了)。 Tableau 不能处理 TSV 文件,Access 也不能。我尝试使用 010 Editor
我总共有 254 个文本文件。我想在 r-programming 中将所有文本文件转换为一个 tsv 文件。我该怎么做?即使在 r 中不可能,还有其他方法可以做到吗? path % wr
我需要阅读一个表格,它是 .tsv R 中的文件。 test <- read.table(file='drug_info.tsv') # Error in scan(file, what, nmax,
我有以下代码要输出到 csv。 import csv keys = ['Name','Hour','Time'] dirname = os.path.dirname(os.path.abspath(_
我正在尝试在 Ubuntu 17.10 中从命令行执行 tesseract。我希望输出位于 .tsv 文件中,因为我需要置信率。正如所解释的here ,我执行: tesseract testing_i
我想使用 Java 代码中的 Apache Jena 的库将 tsv 文件转换为 rdf 文件。我找到了一个从 csv 转换为 rdf 的示例,但它对我没有多大帮助。链接为:http://www.es
我有一个 tsv txt 文件,其中包含 3 行数据。 看起来像: HG sn FA PC 2 16:0 PI 1 18:0 PS 3 20:0 PE 2 24:0
我有以下代码要输出到 csv。 import csv keys = ['Name','Hour','Time'] dirname = os.path.dirname(os.path.abspath(_
我有一个 .tsv 文件,有 39 列最后一列的数据为字符串,长度超过 100,000 个字符现在发生的事情是当我尝试读取文件第 1 行有标题时,然后是数据 发生的事情是在读取第 1 行之后,它转到第
我在访问 tsv 文件中的数据时遇到一些问题。数据位于 tsv 的第三行。我想访问该名称并在屏幕上打印。 box1.bar1 box1.bar2 box1.bar3 box1.bar4
我有一个充满 n 个数据点的 TSV 文件,我想计算所有点之间的距离。我有这样的东西: 我想做的是 .iloc 功能 import pandas as pd x = pd.read_csv('data
我正在尝试在 TSV 上使用正则表达式将每个元素放入捕获组中(听起来很简单,我认为应该如此)。基本上我有一个 58 列的 TSV 文件,我想将每个值放入一个组中。因此,对于正则表达式,我实际上只是执行
您好,我刚刚开始使用 d3 作为数据可视化工具,并且我正在学习本教程:http://bost.ocks.org/mike/bar/ 但是,我的代码: .chart rect { fill:
我正在关注此处的 D3 示例:http://bl.ocks.org/mbostock/3883245 .我正在从远程服务器请求 TSV 来创建图形。我知道这工作正常,因为图表会根据给定的时间自动更改其
我是一名优秀的程序员,十分优秀!