It can be a bit daunting at first but after a bit of work, it gets pretty easy. I don't have the time right now to make a .cap for you, but I'll try to explain a few things as best I can.
If you don't know already, an array is basically a grid, like any other grid, except on each point it can store a value. For instance, 1,1 would be a value (1X and 1Y) and 4,3 could have a different value. Most arrays can be 3 Dimensional, it helps to think of it like a spreadsheet in Microsoft Excel or OpenOffice Calc, most are set up on a grid for your X and Y and each sheet would be like a Z.
With that said, once you create an array, it's completely blank. From here you can choose to load a file (and no, I'm sorry, you can't exactly load straight from a .txt file, hopefully C2 will have that feature), or input a value.
To input a value, simply pick the command "set value at X" or "X,Y" or "X,Y,Z". From there you are able to select the address for the value you want to store. Be forewarned, if you select an address that is outside the bounds of the array (for instance, if you set the X size to 10, and you pick the number 11, it won't show, but any number from 1-10 is fine, also remember that the arrays are always 1-based so 0 is also out of bounds).
After you have set a few values, you can save the array. Chose the save command, and pick the name of a file to save it to. If you aren't using a common dialog object to allow the user to choose a save location, it always helps to save the file as [AppPath+"yourarray.extention"]. You can save the file as anything you want, even make up an extension, heck call it, "yourarray.lol", it doesn't matter, the data will still be the same and construct will recognize it if you load it.
To load it, it's the exact same thing, except this time click the load command instead of save.
In calling a value from an array during an expression, all you need to do is say [yourarray(x,y,z)] then input the coordinates you wish.
Arrays have 4 conditions that can be used. 3 of them are for referencing coordinates either as a 1D 2D or 3D coordinate. The last one, for each, is a loop. Basically it will run through each element and perform actions based on the events and the conditions. For instance, you can say [for Each element - set value at yourarray.currentX,yourarray.currentY,yourarray.currentZ to "Ziggy like Chicken"] and every coordinate on that array will say "Ziggy like Chicken".
For level editors, it's a good idea to learn how to use values correctly to access a part of an array. For instance, the .CurrentXYZ will access the current section during a for each loop, but in your case you probably want it set to a grid. So, say you have your condition to when mouse left is clicked, instead of just saying "write value to 1,1,3", you'll probably want it to pick the coordinate that your mouse is pointing at, so say "write value to round(mouseX/32)*32, round(mouseY/32)*32, 1" and it will set the index to where ever your mouse is pointing on a 32x32 grid size. and of couse, also in this condition you can tell it to create a tile at that specific location, and all that fun stuff.
Now that you can place tiles, you'll probably want to load them too. All you need to to to load them is whenever the load is triggered run a loop, call it "load" one time. as a sub event in that load loop, do a for each element on your array loop. As a sub event to that, you're going to compare a value on your array. [if value at currentX,currentY,currentZ is equal to "tile" (or whatever value you indicated to be a tile in the placement event) then create a tile at currentX*32, currentY*32, currentZ*32]
And that's the basics, there are many more things you can do with a tile based editor, for instance, fringe tiling (which makes it so your tile changes based on the tiles around it), which I've got a fairly decent article on the subject here,
although that was written to be used in MMF2, construct uses the same logic.
Hope this helped a little bit, and if you're still stuck I'm sure someone will help you further.