2016-06-15 9 views
0

私はStataと仕事をしており、初心者です。私はフォルダ名をつかむことに関して質問があります。 (* Qの後に何を表す)私はQ *、各フォルダに行きたいディレクトリ内のすべてのフォルダを解析する

Q100 
Q101 
Q102 
.... 

、という名前のファイルを見つける:私はこのような以下のフォルダを持っているディレクトリ、\テスト\ abcのを、持っています"filenameQ *"を実行して何かを行い、出力を\ Test \ abcに送り返します。次のコードは、私がやりたいことのアイデアを示しています。ここで、varlist Q *は、ディレクトリでQで始まるすべてのフォルダの配列を表します。しかし、フォルダ名は変数ではないので、 。

cd "\\Test\abc" 
foreach x of varlist Q* /* FOLDER NAMES */ { 
    cd "`x'" 
    use "filename`x'" 
    display something and send it back to directory "\\Test\abc" 
    cd .. 
} 

答えて

4

ローカルR(フォルダ)内のフォルダの名前を格納しますfoldersと呼ばれる、ユーザー作成コマンドがあります。ファイルに対しても同じことを行うfsという別のコマンドがあります。

ここ(コメント欄にあなたの順序制約を与えられた)あなたがこれを行う方法の例です:

capture ssc install fs, replace 
cd "~/Desktop/Test/abc" 

/* Get a list of years to loop over by stripping out Q[0-9] stubs, quotes, and de-dupeing */ 
folders Q* 
local years=ustrregexra(`"`=ustrregexra(`"`r(folders)'"',"Q[0-9]","")'"',`"""',"") 
local years: list uniq years 

foreach y of local years { 
    folders Q?`y' 

    foreach d in `r(folders)' { 
    cd "`d'" 
    fs filename* 
     foreach f in `r(files)' { 
      ls `f' 
     } 
    cd .. 
    } 
} 
+0

'folders'と' fs'は同じパッケージ 'fs'に入っていますので、1回のインストールで十分です。 –

+0

ありがとうございます!もう1つの質問 - Q *が順不同であると仮定して、どのようにフォルダの内容を並べ替えるのですか? – JDY

+0

@Justin 'folders'と' fs'は物事を昇順に並べます。どのようにこれらを並べ替えると思いますか? –

2

のStataはマクロの拡張機能のセットを持っています。参照としてhelp extended_fcnを参照してください。これらの拡張機能の1つは、フォルダやファイルの名前を取得するのに役立ちます。

<PATH1> 

が関心のフォルダを含むフォルダへのパスです

local folderList : dir "<PATH1>" dirs "Q*" 

を使用し、folderListという名前のローカルマクロに保存されたフォルダのリストを取得します。あなたは同様にここ

local fileList : dir "<PATH2>" files "filenameQ*" 

を使用して、フォルダ内のファイル名を引き出すことができることは2つのforeachのループを使用して基本的な考え方です:

* get the list of folders 
local path1 <PATH1> 
local folderList : dir "`path1'" dirs "Q*" 

* loop through folders 
foreach folder of local folderList { 
    * get list of files 
    local fileList : dir "`path1'/`folder'" files "filenameQ*" 

    * loop through files 
    foreach file of local fileList { 
    * do stuff to file 
    use `file' 
    ** do more stuff 
    } 
} 

多くの場合、同じ作業ディレクトリを維持することが望ましいと私はcd一部を削除しました現在の関心ファイルの場所に関係なく同じ出力パスを指定するために使用します。

関連する問題