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

我想獲取特定路徑下文件的末次修改時間莹捡,例如鬼吵,.sas.log的末次修改時間,兩者比較判斷程序更新后篮赢,是否重新Run過齿椅;例如,Source側(cè) (Production)的.log文件與QC側(cè) (Validation)的.log的末次修改時間启泣,判斷V側(cè)程序是否在P側(cè)程序之后Run過涣脚。

利用Dopen系列以及Fopen系列函數(shù),可以實現(xiàn)上述功能寥茫。

為了方便讀者更好的理解遣蚀,我先介紹這兩個系列中的一些函數(shù)。這篇文章介紹Dopen系列函數(shù)纱耻,涉及的函數(shù)如下:

  • DOPEN
  • DCLOSE
  • DNUM
  • DREAD
  • DOPTNAME
  • DINFO

我使用以下路徑文件進行演示芭梯,路徑中有4個.sas文件、4個.log文件弄喘,以及1個文件夾玖喘,共9個文件

Directory

1. DOPEN(fileref)

DOPEN函數(shù)的作用是蘑志,打開一個路徑累奈,并返回一個路徑標識值 (Opens a directory, and returns a directory identifier value)。

這可以理解為急但,在一次SAS會話中澎媒,給路徑發(fā)放身份證明,這個證明與路徑是一一對應的波桩,就像人的身份證一樣戒努。人有了身份證,可以進行諸如乘高鐵镐躲、坐飛機的活動柏卤;在SAS會話中,路徑有了“身份證”匀油,也可以進行一些“特定活動”。

DEOPEN函數(shù)的參數(shù)值是一個文件引用(fileref)勾笆,這個文件引用必須在調(diào)用函數(shù)前與特定的路徑進行關聯(lián)敌蚜,常用的文件關聯(lián)方式有兩種:

第1種,全局filename語句:

filename dirpath "E:\99_Test\Test\test1";

第2種窝爪,filename函數(shù):

data test;
  fileres = filename("dirpath", "E:\99_Test\Test\test1");
run;

如果關聯(lián)成功弛车,filename函數(shù)會返回0齐媒;如果關聯(lián)失敗,filename函數(shù)會返回非0值纷跛。

文件引用關聯(lián)成功后喻括,就可以使用DOPEN函數(shù)打開,函數(shù)在該SAS會話中贫奠,返回路徑對應的“身份證號”唬血。

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

data tmp;
    fileres = filename("dirpath","&dirpath"); 

    dirid = dopen("dirpath"); 
run;

Dopen

Filename函數(shù)返回0值,說明文件引用關聯(lián)成功唤崭。Dopen函數(shù)返回的路徑“身份證號”的值為1拷恨。

其他信息可以參考SAS文檔:SAS Help Center: DOPEN Function

2. DCLOSE(directory-id)

DCLOSE函數(shù)的作用是谢肾,關閉DOPEN函數(shù)打開的路徑(Closes a directory that was opened by the DOPEN function)腕侄。

DCLOSE函數(shù)的參數(shù)為,DOPEN返回的“身份證號”芦疏。DCLOSE函數(shù)可以類比冕杠,注銷身份證號。路徑的“身份證號”一旦被注銷酸茴,一些基于“身份證號”的活動就沒辦法進行分预。

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

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

    dirid = dopen("dirpath"); 

    dclose = dclose(dirid);
run;

Dclose

“身份證號”注銷成功,返回0值弊决;注銷不成功噪舀,返回非0值。

其他信息可以參考SAS文檔:SAS Help Center: DCLOSE Function

3. DNUM(directory-id)

DNUM函數(shù)的作用是飘诗,返回路徑內(nèi)文件數(shù)量(Returns the number of members in a directory)与倡。

例如,演示路徑下有9個文件昆稿,DNUM函數(shù)對該路徑的“身份證號”進行處理纺座,返回值應該是9。

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

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

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

dnum

其他信息可以參考SAS文檔:SAS Help Center: DNUM Function

4. DREAD(directory-id, nval)

DREAD函數(shù)的作用是溉潭,讀取路徑下文件的名稱(Returns the name of a directory member)净响。

DREAD函數(shù)有2個參數(shù),一個是路徑的“身份證號”喳瓣,一個是路徑內(nèi)文件的位序馋贤,文件位序的排序為文件名的字符排序

演示路徑下有9個文件畏陕,對應的配乓,也就是可以讀取到9個文件的名稱。

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

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

    dirid = dopen("dirpath."); 

    length direct filename filepath $200;
    
    direct = "&dirpath";

    ord = 1;
    filename =dread(dirid, 1); 
    filepath = catx("\", direct, filename);
    output;

    ord = 2;
    filename =dread(dirid, 2); 
    filepath = catx("\", direct, filename);
    output;

    ……

    ord = 9;
    filename =dread(dirid, 9); 
    filepath = catx("\", direct, filename);
    output;
run;

Dread

一一讀取文件比較繁瑣,由于DNUM函數(shù)可以獲取路徑內(nèi)文件數(shù)目犹芹,基于此可以使用Do循環(huán)進行讀取文件名稱崎页,路徑名稱與文件名拼接可以獲得文件路徑

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

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

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

    length direct filename filepath $200;
    
    direct = "&dirpath.";

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

    drop i;
run;

循環(huán)讀入結果與上面相同腰埂。

其他信息可以參考SAS文檔:SAS Help Center: DREAD Function飒焦。

5. DOPTNAME(directory-id, nval)

DOPTNAME函數(shù)的作用是,返回路徑的屬性名稱(Returns directory attribute information)屿笼。

DOPTNAME函數(shù)有2個參數(shù)牺荠,一個是路徑的“身份證號”,一個是路徑具體屬性的次序刁卜。在不同的電腦操作系統(tǒng)中志电,SAS讀取到的屬性是不同的

在Windows操作系統(tǒng)中蛔趴,路徑屬性只有1個:

  • Directory

在UNIX操作系統(tǒng)中挑辆,路徑屬性有5個:

  • Directory
  • Owner Name
  • Group Name
  • Access Permission
  • Last Modified

不同的SAS系統(tǒng)語言,返回的結果也不同孝情。以Windows系統(tǒng)為例鱼蝉,舉例如下:

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

data tmp;
  fileres=filename("dirpath","&dirpath."); 
  dirid=dopen("dirpath");  

  length info_it $200;
  info_it = doptname(dirid, 1); output;
  info_it = doptname(dirid, 2); output;
run;

不同的SAS系統(tǒng)語言,返回的屬性名稱也不同:

中文環(huán)境
英文環(huán)境

因為Windows系統(tǒng)中箫荡,DOPTNAME函數(shù)只能返回一個路徑屬性魁亦。當次序值取2時,函數(shù)返回值就為空羔挡,同時Log中也會輸出錯誤信息描述洁奈。

Log

其他信息可以參考SAS文檔:SAS Help Center: DOPTNAME Function

6. DINFO(directory-id, information-item)

DINFO函數(shù)的作用是绞灼,返回路徑屬性的具體信息(Returns information about a directory)利术。

DINFO函數(shù)有2個參數(shù),一個是路徑的“身份證號”低矮,一個是路徑的屬性名稱印叁,名稱因SAS系統(tǒng)語言的不同而不同。屬性名稱可以參考DOPTNAME函數(shù)的返回值军掂。

中文環(huán)境:

**dinfo-Chinese;
%let dirpath = E:\99_Test\Test\test1;

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

  dirid=dopen("dirpath");  

  length attr $200;
  attr= dinfo(dirid, "目錄");
run;
Dinfo-Chinese

英文環(huán)境:

**dinfo-English;
%let dirpath = E:\99_Test\Test\test1;

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

  dirid=dopen("dirpath");  

  length attr $200;
  attr= dinfo(dirid, "Directory");
run;
Dinfo-English

在Windows環(huán)境下轮蜕,這個函數(shù)顯得很雞肋。只能讀取一個路徑的“路徑”信息蝗锥,有點脫褲子放屁的意味跃洛。。终议。

其他信息可以參考SAS文檔:SAS Help Center: DINFO Function税课。

相關閱讀:
SAS編程:如何獲取某路徑下文件的名稱闲延?
SAS編程:Fopen系列函數(shù)介紹

感謝閱讀, 歡迎關注韩玩!
若有疑問,歡迎評論交流陆馁!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末找颓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叮贩,更是在濱河造成了極大的恐慌击狮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件益老,死亡現(xiàn)場離奇詭異彪蓬,居然都是意外死亡,警方通過查閱死者的電腦和手機捺萌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門档冬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桃纯,你說我怎么就攤上這事酷誓。” “怎么了态坦?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵盐数,是天一觀的道長。 經(jīng)常有香客問我伞梯,道長玫氢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任谜诫,我火速辦了婚禮漾峡,結果婚禮上,老公的妹妹穿的比我還像新娘猜绣。我一直安慰自己灰殴,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布掰邢。 她就那樣靜靜地躺著牺陶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辣之。 梳的紋絲不亂的頭發(fā)上掰伸,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音怀估,去河邊找鬼狮鸭。 笑死合搅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的歧蕉。 我是一名探鬼主播灾部,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惯退!你這毒婦竟也來了赌髓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤催跪,失蹤者是張志新(化名)和其女友劉穎锁蠕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懊蒸,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡荣倾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骑丸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舌仍。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖者娱,靈堂內(nèi)的尸體忽然破棺而出抡笼,到底是詐尸還是另有隱情,我是刑警寧澤黄鳍,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布推姻,位于F島的核電站,受9級特大地震影響框沟,放射性物質(zhì)發(fā)生泄漏藏古。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一忍燥、第九天 我趴在偏房一處隱蔽的房頂上張望拧晕。 院中可真熱鬧,春花似錦梅垄、人聲如沸厂捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽靡馁。三九已至,卻和暖如春机久,著一層夾襖步出監(jiān)牢的瞬間臭墨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工膘盖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胧弛,地道東北人尤误。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像结缚,于是被迫代替她去往敵國和親损晤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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