SAS編程:如何獲取某路徑下所有文件的修改時(shí)間?

1. 目的

獲取文件末次修改時(shí)間屹堰,可以進(jìn)行一些的程序檢查肛冶。

例如,.sas和.log的末次修改時(shí)間扯键,兩者比較可以判斷出睦袖,程序更新后,是否重新Run過(guò)荣刑;例如馅笙,Source側(cè) (Production)的.log文件與QC側(cè) (Validation)的.log的末次修改時(shí)間,判斷V側(cè)程序是否在P側(cè)程序之后Run過(guò)厉亏。

2. 涉及內(nèi)容

前面兩篇文章介紹了董习,通過(guò)SAS編程,如何獲取某路徑下的所有文件名稱爱只,以及如何如何獲取某個(gè)文件的末次修改時(shí)間:

SAS編程:如何獲取某路徑下文件的名稱皿淋?
SAS編程:如何獲取某文件的修改時(shí)間?

這篇文章是兩者內(nèi)容的結(jié)合恬试,先使用Dopen系列函數(shù)獲取所有文件的名稱(文件路徑)窝趣,再使用Fopen系列函數(shù)獲取所有文件的修改時(shí)間

文章中所涉及具體函數(shù)介紹训柴,參考以下兩篇文章:

SAS編程:Dopen系列函數(shù)介紹
SAS編程:Fopen系列函數(shù)介紹

我使用以下路徑文件進(jìn)行演示哑舒,路徑中有4個(gè).sas文件、4個(gè).log文件幻馁,以及1個(gè)文件夾洗鸵,共9個(gè)文件。

Directory

3. 獲取所有文件的名稱(文件路徑)

使用Dopen函數(shù)打開指定路徑宣赔,在當(dāng)前SAS會(huì)話中预麸,獲取路徑ID;使用Dnum函數(shù)獲取該路徑內(nèi)的文件數(shù)目儒将;使用Do語(yǔ)句循環(huán)以及Dread函數(shù)吏祸,獲取路徑下每一個(gè)文件的名稱。

獲取名稱后钩蚊,將文件夾路徑與文件名稱拼接贡翘,就獲取到文件的對(duì)應(yīng)路徑。

**Dopen;
%let dirpath = E:\99_Test\Test\test1;

data _tmp1;
  fileres=filename("dirpath","&dirpath."); 

  dirid=dopen("dirpath");  
  num = dnum(dirid);

  length direct  filename  filepath $200;

  if dirid > 0 and num > 0 then do;
    do i = 1 to num;
      direct = "&dirpath.";
      filename = dread(dirid, i);
      filepath = catx("\", direct,filename);
      output;
      end; 
    end;

  keep direct filename  filepath;
run;

運(yùn)行結(jié)果如下:

文件路徑

4. 獲取所有文件的修改時(shí)間

使用Fopen函數(shù)打開文件路徑砰逻,在當(dāng)前SAS會(huì)話中鸣驱,獲取文件ID;使用Finfo函數(shù)獲取文件的修改時(shí)間蝠咆。

不同SAS語(yǔ)言環(huán)境下踊东,文件的屬性名稱不同北滥。以末次修改時(shí)間為例:中文環(huán)境,“上次修改時(shí)間”闸翅;英文環(huán)境再芋,“Last Modified”。

中文環(huán)境:

**Fopen -- Chinese;
data _tmp2;
  set _tmp1;

  *Get fileID;
  fileres = filename("filepath", filepath);
  fileid = fopen("filepath");
    
  *Get Last Modified date;
  if fileid > 0 then do;
    length  Last_modified $200;
    Last_modified = finfo(fileid, "上次修改時(shí)間"); 
  end;

  *Close fileID;
  fileid_c = fclose(fileid);
run;

結(jié)果如下:

中文環(huán)境

英文環(huán)境:

**Fopen -- English;
data _tmp2;
  set _tmp1;

  *Get fileID;
  fileres = filename("filepath", filepath);
  fileid = fopen("filepath");
    
  *Get Last Modified date;
  if fileid > 0 then do;
    length  Last_modified $200;
    Last_modified = finfo(fileid, "Last Modified"); 
  end;

  *Close fileID;
  fileid_c = fclose(fileid);
run;
英文環(huán)境

最后使用fclose函數(shù)注銷當(dāng)前SAS會(huì)話中文件ID的這一操作坚冀,在日常工作中比較常用济赎,也是一個(gè)比較好的編程習(xí)慣。

例如记某,對(duì)于不需要輸出到SAS Results頁(yè)面的程序結(jié)果司训,可以在其前后添加:ods results off;, ods results on,即關(guān)閉后再打開液南。

例如壳猜,在日志中輸出某個(gè)宏程序的運(yùn)行代碼,可以在其前后添加:options mprint;, options nomprint;, 即打開后再關(guān)閉滑凉。

讀者可以自行測(cè)試下蓖谢,上面代碼去掉fclose函數(shù)處理后是什么輸出結(jié)果。

總結(jié)

對(duì)于第4步譬涡,我嘗試了好幾種方法闪幽,當(dāng)前處理是最簡(jiǎn)潔的。

之前文章SAS宏程序:批量獲取文件的修改時(shí)間介紹了涡匀,SAS如何通過(guò)調(diào)用本機(jī)電腦CMD語(yǔ)句的返回結(jié)果盯腌,批量獲取文件的修改時(shí)間。但在公司服務(wù)器系統(tǒng)測(cè)試發(fā)現(xiàn)陨瘩,SAS無(wú)法訪問(wèn)CMD結(jié)果腕够,我沒(méi)去深究具體原因瞎颗。

Python環(huán)境下蹈胡,實(shí)現(xiàn)這一功能也不復(fù)雜萤悴,但要考慮是否允許在公司系統(tǒng)內(nèi)進(jìn)行隶垮,需要跟IT溝通。

感謝閱讀淤年, 歡迎關(guān)注十厢!
若有疑問(wèn)避乏,歡迎評(píng)論交流贯卦!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末资柔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撵割,更是在濱河造成了極大的恐慌贿堰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啡彬,死亡現(xiàn)場(chǎng)離奇詭異羹与,居然都是意外死亡故硅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門纵搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)契吉,“玉大人,你說(shuō)我怎么就攤上這事诡渴。” “怎么了菲语?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妄辩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我山上,道長(zhǎng)眼耀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任佩憾,我火速辦了婚禮哮伟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妄帘。我一直安慰自己楞黄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布抡驼。 她就那樣靜靜地躺著鬼廓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪致盟。 梳的紋絲不亂的頭發(fā)上碎税,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音馏锡,去河邊找鬼雷蹂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杯道,可吹牛的內(nèi)容都是我干的匪煌。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼党巾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虐杯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起昧港,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤擎椰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后创肥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體达舒,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡值朋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巩搏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昨登。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贯底,靈堂內(nèi)的尸體忽然破棺而出丰辣,到底是詐尸還是另有隱情,我是刑警寧澤禽捆,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布笙什,位于F島的核電站,受9級(jí)特大地震影響胚想,放射性物質(zhì)發(fā)生泄漏琐凭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一浊服、第九天 我趴在偏房一處隱蔽的房頂上張望统屈。 院中可真熱鬧,春花似錦牙躺、人聲如沸愁憔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惩淳。三九已至,卻和暖如春乓搬,著一層夾襖步出監(jiān)牢的瞬間思犁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工进肯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留激蹲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓江掩,卻偏偏與公主長(zhǎng)得像学辱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子环形,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容