2017-04-06 2 views
0

に遭遇するまで、私は以下のような行があり、セミコロンなどの区切り文字を持つテキストファイルから読み取るしようとしている:私は読んしようとしています読むデリミタが

Sun rises 
in the east 
    and; 
sets in the 
west 
; 

私は無駄のためinfileオプションで利用可能なほとんどすべてのオプションを試してみました 変数名

1 Sun rises in the east and 
2 sets in the west 

以下のような単一の別々のレコードに区切り文字区切り文字からのデータ。上記のように読むことは可能ですか?どうやってするの?任意の手掛かり/助けをいただければ幸いです。

+0

あなたが試した投稿 – Reeza

+0

は、lrecl、linesize、@@とallを使用しようとしましたが、どれも正しい結果を出していませんでした。 – NEOmen

+0

複数のスペースが1つに圧縮されても気にしないようですね。東方は東方になります。そうであれば、単語を単語単位で読み、単語に区切り文字が含まれると停止します。 – Tom

答えて

1

recfm=nは、「改行」しないようにSASに指示する方法です。だから、:あなたはそれらの文字を削除したい場合は、(LF/FFを含む)制御文字を削除するにはcオプションでcompressを使用できるように改行が、ちょうど別の2つの文字として読まれることを

data want; 
    infile "c:\temp\test.txt" recfm=n dsd dlm=';'; 
    length text $1024; 
    input text $; 
run; 

注意。

+0

ありがとうJoe.Thisが役立ちます。圧縮を使用して、また、希望の文字を削除し、私は "0D" xと "0A" xを削除するためにトランジェントを使用しました。 – NEOmen

+0

確かに合理的な解決策です。 'transtrn'はおそらくその目的のために最適な翻訳 - 変量関数ですが、それらのどれもが行います。 – Joe

0

単語単位で読み込み、長い行に連結します。

data want ; 
    infile mydat end=eof ; 
    length word $200 line $2000 ; 
    drop word; 
    do while (^eof and ^index(word,';')); 
    input word @ ; 
    line = catx(' ',line,compress(word,';')); 
    end; 
    if _n_ > 1 or line ne ' ' then output; 
run; 
+0

タイムアウトを取ってくれてありがとうTom。これは良いハックな解決策でもあります。 – NEOmen