2016-09-22 1 views
0

여러 레코드 사이에 여러 줄에 걸쳐있는 첫 번째 레코드 항목과 일치하는 단일 패턴 인 스칼라 솔루션이 필요합니다. 레코드는 항상 RECORD라는 단어로 시작합니다. 시나리오 2 scala regex .. 하나 또는 여러 레코드가있는 경우 일치시킬 단일 패턴

시나리오 모두
 
================================================== 
RECORD-1
    "FOO BAR"
    "ID-100"
    "TOY"
RECORD-2
    "X BAR"
    "ID-200"
    "DOLL"
RECORD-3
    "Y BAR"
    "ID-400"
    "STATUE"
==================================================

 
================================================== 
RECORD-1
    "FOO BAR"
    "ID-100"
    "TOY"
==================================================

시나리오 1

는, I는 상기 제 레코드 "FOO BAR"가 스칼라 코드를 사용하여 추출 될 필요가있다. REPL 솔루션은 더 환영합니다.

+0

귀하의 의견이 있으십니까? – Flint

+0

파일에 하나 이상의 RECORD가 있으며 첫 번째 레코드 만 원하십니까? – jwvh

+0

@Flint, 나는 작동하는 perl 코드를 가지고있다. scala echo -e "record ... \ nRecord ... \ nRecord ..."에서 같은 것을 시뮬레이션하고 싶었다. perl -ne 'BEGIN {$/= ""} {$ _ = ~ s/Record (. +?) (<} Record) (. *)/Record \ 1/mosg; print} ' echo -e "Record ..."| perl -ne 'BEGIN {$/= ""} {$ _ = ~ s/Record (. +?) (<} Record) (. *)/Record \ 1/mosg; print} ' – stack0114106

답변

0

두 번째 레코드까지 모든 것을 간단하게 캡처 할 수 있습니다.

scala> val firstRec = io.Source.fromFile("records.txt").getLines.takeWhile(_ != "RECORD-2") 
firstRec: Iterator[String] = non-empty iterator 

거기에서 원하지 않는 부분 (헤더, 빈 줄 등)의 레코드를자를 수 있습니다.

+0

라인 시작 부분에서 시작할 것입니다. 원래 질문에 약간의 복잡성을 추가합니다. 나는 10 개의 레코드가 있고 "FOO BAR"에 3 개의 복사본이 있다고 가정합니다. 6 번, 7 번, 8 번 레코드가 연속적으로 나타납니다. 이 경우, 여섯 번째 레코드 만 추출 할 수 있습니까? 그것은 .. "FOO BAR"중복 중 첫 번째 기록입니다. – stack0114106

+0

나는 모든 레코드를 읽고 쉽게 처리 (필터링, 중복 검색 등) 할 수있는 데이터 형식으로 압축하는 것이 가장 쉬운 시나리오라고 생각합니다. – jwvh

+0

나는 고민 중입니다 .. 데이터 형식을 어떻게 넣을 수 있습니까? 해결책을 보여 주시겠습니까? – stack0114106

관련 문제