我需要定期表达才能将数据分组到CSV文件中。我需要将数据分组到特定字符串" PDP-TD-PDP" 我的文件内容如下。
PDP-TD-PDP
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
PDP-TD-PDP
ffffff
gggggg
hhhhhh
iiiiii
PDP-TD-PDP
jjjjjj
kkkkkk
llllll
mmmmmm
所以我的结果应该如下,我需要将数据分组到每个
1 PDP-TD-PDP
1 aaaaaa
1 bbbbbb
1 cccccc
1 dddddd
1 eeeeee
2 PDP-TD-PDP
2 ffffff
2 gggggg
2 hhhhhh
2 iiiiii
3 PDP-TD-PDP
3 jjjjjj
3 kkkkkk
3 llllll
3 mmmmmm
我们需要这个要求,因为对于每个特殊字符串" PDP-TD-PDP"我们需要将内容加载到不同的表。如果我们有组ID,那么我们可以轻松地从文件中提取
答案 0 :(得分:0)
如何将字符串拆分成行然后对它们进行分析呢?
const data = `
PDP-TD-PDP
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
PDP-TD-PDP
ffffff
gggggg
hhhhhh
iiiiii
PDP-TD-PDP
jjjjjj
kkkkkk
llllll
mmmmmm`
const asignId = data => {
const lines = data.split('\n')
let out = ''
let id = 0
for (let i = 0; i < lines.length; i++) {
if (/\S+/.test(lines[i])) {
if (/PDP-TD-PDP/.test(lines[i])) id++
out += id + ' ' + lines[i] + '\n'
} else {
out += lines[i] + '\n'
}
}
return out
}
console.log(asignId(data))
&#13;
答案 1 :(得分:0)
你要求正则表达式,但为了保留一个计数器,你需要更多或其他东西。如果您声明正在使用的正则表达式的语言(例如:perl&#39; s等),则可以提供正则表达式。
但是,您的样本测试可以使用awk脚本转换为您的样本输出(请注意它不是CSV!)。我们假设您的示例文本被调用:&#34; sample.csv&#34;
awk 'BEGIN { count=0 } { if ($1 == "PDP-TD-PDP") count++; print count, $0 }' sample.csv > sample.out
然后,sample.out将具有您在样本中要求的输出。 $ 0包含整个记录,$ 1包含第一个单词。
然而;如你所说,你正在处理一个CSV文件,你可能希望输出更像:
1,....
1,....
2,....
2,....
那么,你的awk脚本应该是这样的:
awk 'BEGIN { FS=",", count=0 } { if ($1 == "PDP-TD-PDP") count++; print count "," $0 }' sample.csv > sample.out
注意更改:FS设置在开头(字段分隔符),并且print语句更改为在计数和记录之间打印逗号,而逗号周围没有空格。
如果PDP-TD-PDP可以出现在任何地方,而不仅仅是第一条记录,则通过(/ PDP-TD-PDP /)更改:($ 1 ==&#34; PDP-TD-PDP&#34;)。