2016-10-25 1 views
1

で正規表現を使用して、テキストファイルの特定のテキストを選ぶ:私は、次のデータ(などの何かを)持っているSAS

DATA test2; 
INPUT STRING $31. ; 
PUT STRING; 
DATALINES; 

James Bond is a spy 
Hello World 
123 Mill st P BOX 223 
11 prospect ave p o box 

P Box 225 
Hello World 
pobox 2212 

P. O. box. 256 
; 
run; 

私はHello World「ので始まる行だけを読みたいです「次の空白行まで、私の出力は

Hello World 
123 Mill st P BOX 223 
11 prospect ave p o box 

Hello World 
pobox 2212 

私の考えで、そのようなことを、これらの2つ(または一般的にそれ以上)のテキストのそれぞれにいくつかの操作を行い、その後、それらを一緒に追加することです。しかし、まず、必要なテキストだけをフィルタリングする必要があります。私の元のテキストファイルは巨大であり、そのスペースはどこにあるのか分かりません。 ...

data test3; 
set test2; 
if _n_=1 then do; 
retain startline endline; 
startline = prxparse('/Hello World/'); 
endline = prxparse('/^\s/'); 
end; 

if (prxmatch(startline,STRING)=1 or prxmatch(endline,STRING)=1) ; 
run; 

それは私に次のような出力が得られますが、私も休息が必要:

私の次の試みはこれです

output

EDIT:私は強調すべきですテキスト内の空白行になる可能性がありますが、私は情報がの間にあるようにしてください。 "Hello World"との間には空白行

答えて

2

開始と終了を別々に確認し、フラグを保持する必要があります。

編集: この方法では、目的のデータ行だけが出力されます。連結は別のステップで行う必要があります。連結で

data test3; 
set test2; 

if _n_=1 then do; 
retain startline endline start ; 
startline = prxparse('/Hello World/'); 
endline = prxparse('/^\s/'); 
end; 

if prxmatch(endline,STRING) then start = 0; 
else if prxmatch(startline,STRING) then start = 1; 
if start then output; 

run; 

data test3; 
set test2; 

if _n_=1 then do; 
retain startline endline start OUTPUT; 
length OUTPUT $3000; 
startline = prxparse('/Hello World/'); 
endline = prxparse('/^\s/'); 
end; 

if prxmatch(endline,STRING) and OUTPUT ne "" then do; /* check for endline - output string as observation and reset */ 
    output; 
    start = 0; 
    OUTPUT = ""; 
end; 

if start then do; 
    /* Add text manipulation here */ 
    OUTPUT = catx(" ",OUTPUT,STRING); /* concat string */ 
end; 

if prxmatch(startline,STRING) then start = 1; /* check for startline */ 

keep output; 

run; 
+0

これは私に希望の出力を与えません – Erosennin

+0

ああ、あなたが何をしたのかを2行に連結してみました... OK – Erosennin

+0

"追加"と言ったら、テキストを連結するつもりはありませんでしたか?また、こんにちはワールドラインが含まれているか除外されていますか? – Jetzler

2

私はこのコードを使用して希望の出力を得ると思います。

data test3; 
set test2; 
retain outputflag; 
if find(upcase(string),'HELLO WORLD') then outputflag=1; 
if outputflag then output; 
if string='' then outputflag=0; 
run; 
+0

は貢献してくれてありがとう!とても有難い! – Erosennin

関連する問題