2

私はこのようなものを持っています。これは.txt形式です。

「ランダムタイトル」

ランダムなもの、1月1日午前00:00

2005年、555語、(英語)

「ランダムな長いタイトル」

ランダムなもの、00:00 AM、2005年1月1日、111語、

(英語)

時刻と日付は、yyyymmddおよびhhmmの形式で抽出する必要があります。区切り文字としてコンマを使用しようとしました。

DATA News;
  INFILE 'C:xxxx/xxxx/xxxx' DLM',';
  INPUT Title $75. Time $10. Date $20. Words $15. Lang $10.;
PROC PRINT DATA=News;
  TITLE 'Time and Date';
  VAR Time Date;
RUN;

しかし、失敗しました。これらのエントリには複数の行が含まれており、フォーマットも適切ではありません。

解決策はありますか?

4

1 に答える 1

1

日付が常に次のようにフォーマットされている場合: 00:00 AM, 1 January 2005

次に、perl 正規表現を使用してそれらを見つけることができます。

data test;
input @;
_prx = prxparse('/\d\d:\d\d (?:AM|PM), \d{1,2} (?:January|February|March) \d{4}/');
start = 1;
stop = length(_infile_);
call prxnext(_prx, start, stop, _infile_, position, length);
   do while (position > 0);
      found = substr(_infile_, position, length);
      put found= position= length=;
      call prxnext(_prx, start, stop, _infile_, position, length);
   end;
datalines;
'random title'
random things , 00:00 AM, 1 January
2005, 555 words, (English)
'random long title'
random things , 00:00 AM, 1 January 2005, 111 words,
(English)
;;;;
run;

次に、通常の SAS 文字変数と同じように FOUND 値を使用して、日付と時刻、または datetime 情報を取得します。明らかに、月の短いリストを拡張して、12 か月すべてを含めるようにします。

これは 2 番目の例を見つけますが、最初の例は見つけません (例のデータラインを使用して合理的に見つけることはできません)。ただし、データラインを使用せずにテキスト ファイルを使用している場合は、レコード形式を操作してライン フィードとキャリッジ リターンを削除し、両方を 1 つのレコードと見なすことができます (したがって、一致します)。RECFM=Nそれについての詳細を調べてください。

于 2012-11-30T18:18:30.070 に答える