2010年10月25日 星期一

在Maya中讀取外部文字檔案

//目的:讀取文字檔案,並在Mel的編寫過程中運用其中內容

//檔案路徑在Mel中需要用ForwardSlashes(/)來區隔
//不同於視窗環境中的backslashes (\)

//首先,建立一個*.txt的文件檔案
//放入你想要在Maya中讀取的內容
//例如:

//objectName
pCube -n GGYY_001
pSphere -n GGYY_002
polySphere
polyPyramid

//設定好你的檔案路徑(file path)
//檔案路徑在Maya環境中需要用 ForwardSlashes(/) 來區隔
//不同於視窗環境中的 backslashes (\) 
string $filePath = "D:/Temp/ggyy.txt" ;


//用 fopen 這個指令打開檔案
//"w" 打開複寫內容
//"a" 打開添加內容
//"r" 打開讀取內容
$fileId = `fopen $filePath "r"` ; 

//定義一個新的陣列
string $dataArray[] ;

//用 fgetline 這個指令讀取檔案的第一行
string $nextLine = `fgetline $fileId` ;

//利用while迴圈用一行一行的形式讀取檔案中的所有資料
//直到 size($nextLine) = 0 表示已經沒有資料需要讀取
while (size($nextLine) > 0) {

//指令Strip移除變數string中的所有空白間隔
string $cleanLine = strip($nextLine) ;

//將檔案的內容加入 $dataArray[]
$dataArray[size($dataArray)] = $cleanLine ;

//再取得下一行內容,並迴圈
$nextLine = `fgetline $fileId` ;
    };

//利用for迴圈檢視 $dataArray[] 中的資料
        for($x=0;$x<size($dataArray);$x++)
        {
         print ($dataArray[$x]+"\n");
         } ;      

// ****************************************************************************************

//寫成 Procedure 來做指令呼叫
string $filePath = "D:/Temp/ggyy.txt" ;

global proc string[] Filetest (int $skipFirstLine, string $filePath) {

    $fileId = `fopen $filePath "r"` ;
   
    string $dataArray[] ;

    string $nextLine = `fgetline $fileId` ;
   
    while (size($nextLine) > 0) {

        string $cleanLine = strip($nextLine) ;

        $dataArray[size($dataArray)] = $cleanLine ;
       
        $nextLine = `fgetline $fileId` ;
   
    }
   
// Remove First Line 拿掉第一行備註欄
    if($skipFirstLine) stringArrayRemoveAtIndex(0,$dataArray) ;
   
    return $dataArray ;
}

//呼叫Procedure Filetest 提取檔案內容
//定義Procedure所呼叫的參數:$skipFirstLine, $filePath
string $ggyy[] = Filetest (0, $filePath) ;

//亦可以利用提取string內容來做command使用
//第四行是polySphere,並加上flag
string $command = $ggyy[3]; 
eval($command + " -r 5");


//另外還有幾的個檔案指令

//fread  讀取檔案內容
//此時 $data 並不是一個陣列,內容被視為一個整體字串
//然後再運用 tokenize指令
string $data = `fread $fileId $data` ;

//fprint 顯示檔案內容
fprint $fileId;

//fclose 關閉檔案
fclose $fileId;

//參考教學來源:http://www.scriptswell.net/

沒有留言: