Page 1 of 2

Creating and placing files within a directory

Posted: Thu Jun 13, 2013 4:05 am
by M45HY
Hi guys,

Just had a quick question. I'm basically trying to access a directory and if the directory doesn't exist, I wish to create that directory. For example, if I'm trying to access "C:\Windows\New Folder" but the folder "New Folder" does not exist, I wish to create it. Also, I have currently created a report that creates a Comma Seperated Value (CSV) file. Once that file has been created, I would like to place it (i.e) within the directory as mentioned above.

If anyone knows how to do this or they have done it before, it would be a great help if you could share your wisdom :D

Thanks,
Omash

Re: Creating a Directory and placing files withing that dire

Posted: Thu Jun 13, 2013 5:06 am
by ghosttie

Code: Select all

vars folderDest : FileFolder; begin create folderDest transient; folderDest.fileName := sDestFolder; if not folderDest.isAvailable then folderDest.make; endif; end;

Re: Creating a Directory and placing files withing that dire

Posted: Fri Jun 14, 2013 8:55 pm
by M45HY
Hi ghosttie,

Thanks mate, that worked like a charm! Just had a quick question though, as I mentioned above, if I created a .csv file would it store it in the location that I have specified or would I have to apply another set of coding to move that file in to the destination I want?

Thanks,
Omash

Re: Creating a Directory and placing files withing that dire

Posted: Fri Jun 14, 2013 10:47 pm
by murray
What do you mean by creating a file: Creating it by Jade code, or externally (e.g. by saving from Excel)?

If creating via Jade code using the File class, it "puts" it wherever you specify in the fileName.
You can specify a file path name, e.g. "C:\temp\extracts\myfile.csv".

Re: Creating a Directory and placing files withing that dire

Posted: Fri Jun 14, 2013 11:51 pm
by M45HY
Hi murray,

Sorry, I was a bit unclear here. I did mean creating a .csv file using Jade.

The way that I am using Jade for this is by creating a set of coding that will create the .csv file (e.g. Code A) and a completely separate piece of coding that moves and renames the file (Code B). Code B is called when Code A has completed. I did it this way rather than putting both sets of coding into one group because I am getting a time delay issue, where Code B is not moving and renaming the file because Code A hasn’t yet produced the physical file.

I would like the .csv file to be created, moved and renamed in one set of coding (e.g. Code A) but as mentioned above, I’m getting the delay problem. At the moment, I was using something called setTitle() (not 100% sure whether it is a global method in JADE or something that my predecessors have created) which renames the file but I was unable to rename the file and move it to a specific destination.

I hope that clears up some of the misconceptions. Thanks,
Omash

Re: Creating a Directory and placing files withing that dire

Posted: Sat Jun 15, 2013 1:35 am
by ghosttie
You could have Code A generate a string containing the contents of your CSV and then save it to a file using code like this:

Code: Select all

vars file : File; begin create file transient; file.kind := File.Kind_ANSI; file.shareMode := File.Share_Exclusive; file.mode := File.Mode_Output; file.allowCreate := true; file.fileName := pS_FileName; file.open; file.writeString(pS_ToSave); epilog if file <> null and file.isOpen then file.close; endif; delete file; end;
Or if you just want to move an existing file you could use an external function (which should be less resource intensive than loading the source file using one File object and saving it using a second File object):

Code: Select all

copyFile(sourceFileName : String; destFileName : String; failIfExists : Boolean) : Boolean is CopyFileA in kernel32;

Re: Creating a Directory and placing files withing that dire

Posted: Sat Jun 15, 2013 3:56 am
by M45HY
Hi ghosttie,

Just had a quick question in regards to your reply. I was just trying to understand the first part of the coding that you did. In that example, would I define the 'file.fileName' as being the directory and/or the name of the .csv file?

For example:

Code: Select all

file.fileName := "C:\Windows\New Folder"; // Just directory file.fileName := "File.csv"; // Just File Name file.fileName := "C:\Windows\New Folder\File.csv"; // Both Directory and File Name
Also, would the 'pS_ToSave' be the String of information that (in this case) I would want to write in to File.csv?

Sorry about this; I'm still trying to get use to Jade. Thanks,
Omash

Re: Creating a Directory and placing files withing that dire

Posted: Sat Jun 15, 2013 4:57 am
by ghosttie
This one:

Code: Select all

file.fileName := "C:\Windows\New Folder\File.csv"; // Both Directory and File Name
Also, would the 'pS_ToSave' be the String of information that (in this case) I would want to write in to File.csv?
Yes

Re: Creating a Directory and placing files withing that dire

Posted: Sat Jun 15, 2013 3:08 pm
by murray
Hi Omash,

These issues are not Jade-specific, but are generic to all standard file handling.
The Jade file I/O routines are probably just re-implementations of the core O/S routines.
You will encounter similar coding in many other languages.

The topics of creating, opening, reading, writing, and appending files all fall under the general heading of "File Input and Output (I/O)". You may be able to find a good tutorial that covers these topics and fills in some more details.

The Jade manuals with descriptions of the File, FileNode and FileFolder classes will help you, once you know what it is that you want to do.

Re: Creating a Directory and placing files within that direc

Posted: Sat Sep 21, 2013 2:02 am
by M45HY
Hi guys,

Sorry for the late response; I thought this problem had left me but it came back with vengeance!

Code: Select all

vars file : File; begin create file transient; file.kind := File.Kind_ANSI; file.shareMode := File.Share_Exclusive; file.mode := File.Mode_Output; file.allowCreate := true; file.fileName := pS_FileName; file.open; file.writeString(pS_ToSave); epilog if file <> null and file.isOpen then file.close; endif; delete file; end;
This coding above (with a huge thanks to ghosttie :D ) works perfectly, however, the method in which this coding lies within is called upon several times i.e. Method 1 will retrieve the data from the appropriate location and will store it into a string and then calls Method 2, which writes the line of data into the file. But at the end of the program, only a single line is outputted to the file and I'm assuming that this is happening as the system is opening the file and writing on top of what's there rather than creating a new line/row. How can I do this? Would I have to concatenate the existing data with the new data or do I have to do something else?

Thanks,
Omash