Skill Level: Beginner to Intermediate
There are two things you'll need in order to proceed: some data to write out, and a text a file to write it to. To start off let's create a string array in Maya. In the script editor, copy and paste the following and run it.
// Create A String Array With Test DataNext, create a file in an easy location, e.g. "C:\mel\testFile_v01.txt". In this file, on the first line type the following: "This is the first line of my text file, version 01!". Save and close your file.
string $myStrArray[] = {"This is line one of my data from Maya.", "This is line two.", "And then line three!"} ;
Now let's get into some code and see how this works. The idea here is that we're going to "open" our file as an object in Maya, put our data inside it, then "close" it. If you recall in the previous tutorial we use the fopen command to open the file and prepare it for use.
// Create A String Array With Test DataThe first difference you may have noticed from the previous tutorial is that instead of "r" (for 'read') we've switched to "a" which stands for "append". What this means is that we're telling MEL that when we're working with this particular file, we'll be writing to it but we'll be appending data onto the end of whatever is there. This way using the "a" flag you can keep your current data intact and simply add more to it. Let's continue on with more code.
string $myStrArray[] = {"This is line one of my data from Maya.", "This is line two.", "And then line three!"} ;
// Define Your File Path
string $filePath = "C:/mel/testFile_v01.txt" ;
// Open Your File
$fileId = `fopen $filePath "a"` ;
// Create A String Array With Test DataThe newest line in our code starts with a for in loop and is looping through our string array one line at a time. This is because in this case we don't just want to dump all the data to the file, we want to have control over how it's added and make sure it's exporting to an easily readable format. We loop through our array one line at a time and use the fprint command. What fprint does is essentially the same thing that the normal print command does except it prints to your text file instead of Maya's script editor. Just like print though, it will not add a new line at the end of the argument and this must be done manually, hence the "\n" that I've appended to the $line variable. If you leave this out, all of your data will print to a single line! After we're finished printing out the data we're using fclose to "close" our file object.
string $myStrArray[] = {"This is line one of my data from Maya.", "This is line two.", "And then line three!"} ;
// Define Your File Path
string $filePath = "C:/mel/testFile_v01.txt" ;
// Open Your File
$fileId = `fopen $filePath "a"` ;
// Print Array To File
for($line in $myStrArray)
fprint $fileId ($line+"\n") ;
// Close File
fclose $fileId ;
-----------------------------------------------------------
Tip: If you forget to use fclose and leave the file object "open" within Maya it will become locked and you won't be able to make changes to it outside of the program. If this happens you will need to close Maya to "unlock" your file.
-----------------------------------------------------------
After running this script, take a look at your text file and you'll see the file now reads the following:
This is the first line of my text file, version 01!Nicely done! You are now one step closer to building your data export tool. Next we'll double back slightly and look at another flag we can use in the fopen command. Look at the code below.
This is line one of my data from Maya.
This is line two.
And then line three!
// Create A String Array With Test DataThe only change here is we've swapped the "a" flag with it's brother: "w" which stands for "write". What write will do is destroy the prior contents of the file and replace them with whatever we're printing to it. So your result will be:
string $myStrArray[] = {"This is line one of my data from Maya.", "This is line two.", "And then line three!"} ;
// Define Your File Path
string $filePath = "C:/mel/testFile_v01.txt" ;
// Open Your File
$fileId = `fopen $filePath "w"` ;
// Print Array To File
for($line in $myStrArray)
fprint $fileId ($line+"\n") ;
// Close File
fclose $fileId ;
This is line one of my data from Maya.This time only the string array has been printed to the file and the original file's contents were destroyed.
This is line two.
And then line three!
Both of these flags are useful depending on the context of what you're doing. Be sure to check out these commands in the MEL documentation as well for a slightly more in-depth look at how they work.
It really is simple as that to write out data! As long as you remember to fclose your file and use the correct flags when using fopen you shouldn't have any trouble using this technique.
For more tutorials check out the Technical Artist Tutorials page. Leave a comment below if you have any thoughts or questions and thanks for reading!
Thank you for these explanations. The combination of the two articles was very helpful.
ReplyDeleteClement.
The "\n" does not seem to work, all my output txt is a single liner text. I wonder why....
ReplyDeleteHmm... strange, my bad, apparently on Windows Notepad, the "\n" does not show properly as new line. On NotePad++ it works! False alarm, sorry.
ReplyDeleteJust wanna say I live your blog and tutorials. One of the best man, you are a cool!
ReplyDeleteô dâu đã chuẩn bị tốt chưa?” Thượng Tái Lăng đi vào phòng, tuấn trên mặt lộ vẻ mỉm cười, trên người là bộ tây trang sậm màu do chính bà xã mình chọn.
ReplyDeleteCô thích nhìn anh mặc âu phục, vì cô mà toàn bộ quần áo của anh đều biến thành âu phục.
“Đến đây, đến đây, Tiếng anh cho người đi làm
Tiếng anh cấp tốc
Luyện thi toeic tại hà nội
Tiếng anh cho người lớn tuổi
Tiếng anh cho người mới bắt đầu
Học tiếng anh tại hà nội
dạy tiếng anh cho doanh nghiệp mấy chị em.” Tần Gia Di vỗ tay, ra vẻ một người mẹ. “Lưu lại không gian cho vợ chồng son, chúng ta đừng ở trong này làm chướng mắt.”
Mấy cô gái cười rồi đi ra ngoài.