Dosya İşlemleriFile Operations

This page is part of an incremental translation project. Body text not yet translated to Turkish falls back to English even in TR mode.

File operation'lar, programlama dillerinin temel fonksiyonalitelerinden biridir. TROIA programlama dilinde, file operation'lar basitleştirilmiştir ve programcılara yardımcı olmak için genişletilmiş feature'lara sahiptir. Bu bölüm, file operation'ların temellerini ve genişletilmiş feature'larını tanıtmayı amaçlar.File operations, is one of the basic functionalities of programming languages. In TROIA programming language, file operations are simplified and has extended features to help programmers. This sections aims to introduce basics of file operations and extended features.

GirişIntroduction

Daha önce belirtildiği gibi, TROIA platformu multitier bir architecture'a sahiptir. Bu architecture'ın bir sonucu olarak, bazı file operation'lar server, client veya hem client hem server tarafında kullanılabilir. Bazı file operation'lar client tarafında kullanılabilir olsa bile, (tüm TROIA command'larında olduğu gibi) file command'ları server tarafında çalışır ve sonucu client'a döndürür.As mentioned before, TROIA platform has an multitier architecture. As a result of this architecture, some file operations are available in server, client or both client and server. Even if some file operations are available on client side, (as all TROIA commands) file commands run on server side and returns result to client.

Client tarafı path'ler, server tarafı path'lerden ayırt etmek için önek olarak * karakterine sahiptir. Bu yüzden programcılar, client tarafı bir path'e işaret etmek için * (yıldız) karakteriyle başlayan file path'leri göndermelidir.Client side paths has * character as a prefix to separate them from a server side path. So programmers must send file paths starting with * (star) character, to point a client side path.

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

/* client side path samples *//* client side path samples */

STRPATH = '*C:\USERS\BTAN\Desktop\sourcefile.txt';STRPATH = '*C:\USERS\BTAN\Desktop\sourcefile.txt';

STRPATH = '*C:\TMP\sourcefile.txt';STRPATH = '*C:\TMP\sourcefile.txt';

/* server side paths *//* server side paths */

STRPATH = 'C:\TMP\sourcefile.txt';STRPATH = 'C:\TMP\sourcefile.txt';

STRPATH = '\Files\sourcefile.txt';STRPATH = '\Files\sourcefile.txt';

Client tarafında relative path kullanmak user.dir'den başlar, ancak client tarafında relative path kullanmak önerilmez. Relative path'ler, portable application'lar implement etmek için server tarafında daha kullanışlıdır; application'ın çalıştığı folder'dan başlar.Using relative paths starts from user.dir on client side, but it is not recommended to use relative paths on client side.Relative paths is more useful for server side to implement portable applications, it starts from the folder that application runs on.

GETUSERINFO() system function'ı, client tarafındaki file operation'lar için file separator, temp folder gibi bazı yararlı bilgiler döndürür. GETUSERINFO method'u tarafından döndürülen bazı yararlı bilgiler aşağıdadır. Method hakkında daha fazla bilgi için lütfen TROIA Help'e bakın:GETUSERINFO() system function returns some useful information for file operations on client side such as file separator, temp folder etc. Here is some useful information, returned by GETUSERINFO method. For more information about the method plese see TROIA Help:

OBJECT:OBJECT:

STRING S1, STRING S1,

STRING STRINGVAR3; STRING STRINGVAR3;

S1 = '';S1 = '';

S1 = S1 + TOCHAR(10) + GETUSERINFO('client.temp.folder');S1 = S1 + TOCHAR(10) + GETUSERINFO('client.temp.folder');

S1 = S1 + TOCHAR(10) + GETUSERINFO('client.setget.folder'); //after 8.03 22.14.01-01S1 = S1 + TOCHAR(10) + GETUSERINFO('client.setget.folder'); //after 8.03 22.14.01-01

S1 = S1 + TOCHAR(10) + GETUSERINFO('client.local.iot.scripts.folder'); //after 8.03 22.14.01-01S1 = S1 + TOCHAR(10) + GETUSERINFO('client.local.iot.scripts.folder'); //after 8.03 22.14.01-01

S1 = S1 + TOCHAR(10) + GETUSERINFO('file.separator');S1 = S1 + TOCHAR(10) + GETUSERINFO('file.separator');

S1 = S1 + TOCHAR(10) + SYSCLIENTFSEPARATOR; /* valid after 8.03 */S1 = S1 + TOCHAR(10) + SYSCLIENTFSEPARATOR; /* valid after 8.03 */

S1 = S1 + TOCHAR(10) + GETUSERINFO('user.home');S1 = S1 + TOCHAR(10) + GETUSERINFO('user.home');

S1 = S1 + TOCHAR(10) + GETUSERINFO('user.dir');S1 = S1 + TOCHAR(10) + GETUSERINFO('user.dir');

S1 = S1 + TOCHAR(10) + GETUSERINFO('java.home');S1 = S1 + TOCHAR(10) + GETUSERINFO('java.home');

S1 = S1 + TOCHAR(10) + GETUSERINFO('file.encoding');S1 = S1 + TOCHAR(10) + GETUSERINFO('file.encoding');

S1 = S1 + TOCHAR(10) + GETUSERINFO('user.setgetfolder');S1 = S1 + TOCHAR(10) + GETUSERINFO('user.setgetfolder');

STRINGVAR3 = S1;STRINGVAR3 = S1;

Ve işte örnek kodun sonucu, lütfen kodu kendi client'ınızda çalıştırın ve farkı görün:And here is the result of sample code, please run the code on your own client and see the difference:

C:\Users\btan.IASRDDC\RESOURCES\TMP\C:\Users\btan.IASRDDC\RESOURCES\TMP\

C:\Users\btan.IASRDDC\RESOURCES\SETGET\LOCAL\803DEV\btan\C:\Users\btan.IASRDDC\RESOURCES\SETGET\LOCAL\803DEV\btan\

C:\Users\btan.IASRDDC\RESOURCES\LOCALIOTSCRIPTS\LOCAL\803DEV\00\C:\Users\btan.IASRDDC\RESOURCES\LOCALIOTSCRIPTS\LOCAL\803DEV\00\

\\

\\

C:\Users\btan.IASRDDCC:\Users\btan.IASRDDC

C:\603server\toWebC:\603server\toWeb

C:\Program Files\Java\jre7C:\Program Files\Java\jre7

Cp1254Cp1254

C:\603server\RESOURCES\SETGET\LOCAL\IAS604502\btan\C:\603server\RESOURCES\SETGET\LOCAL\IAS604502\btan\

Ayrıca, file operation'larda kullanmak için server tarafı hakkında bazı yararlı bilgileri okumak mümkündür. Server tarafı bilgisi, SYSGETSERVERINFO() method'u tarafından sağlanır. İşte SYSGETSERVERINFO() method'u için örnek kod ve sonucu:Also its possible to read some useful information about server side to use on file operations. Server side information is provided by SYSGETSERVERINFO() method. Here is the sample code and its result for SYSGETSERVERINFO() method:

OBJECT:OBJECT:

STRING SEP, STRING SEP,

STRING S1, STRING S1,

STRING STRINGVAR3; STRING STRINGVAR3;

SEP = SYSGETSERVERINFO('file.separator');SEP = SYSGETSERVERINFO('file.separator');

S1 = S1 + TOCHAR(10) + SEP;S1 = S1 + TOCHAR(10) + SEP;

S1 = S1 + TOCHAR(10) + SYSSERVERFSEPARATOR; /* valid after 8.03 */S1 = S1 + TOCHAR(10) + SYSSERVERFSEPARATOR; /* valid after 8.03 */

S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('TraceFolder');S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('TraceFolder');

S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('ServerPath') + SEP + 'TempFiles' + SEP;S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('ServerPath') + SEP + 'TempFiles' + SEP;

S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('server.temp.folder'); /*valid after 8.03.02 04xxxx*/S1 = S1 + TOCHAR(10) + SYSGETSERVERINFO('server.temp.folder'); /*valid after 8.03.02 04xxxx*/

STRINGVAR3 = S1;STRINGVAR3 = S1;

\\

\\

TRACESTRACES

C:\Users\btan\workspace\troia\TempFiles\C:\Users\btan\workspace\troia\TempFiles\

C:\Users\btan\workspace\troia\TempFiles\C:\Users\btan\workspace\troia\TempFiles\

Dosya Açma/KapatmaOpening/Closing Files

Dosya açmak için OPEN FILE command'ı kullanılır. Command, file path ve file open mode alır. File open mode, dosya açmanın amacını gösterir; örneğin yeni dosya oluşturma, append etme veya okuma. Default open mode FORAPPEND'dir. İşte dosya açmanın syntax'ı:To open files, OPEN FILE command is used. Command takes file path and file open mode. File open mode shows the aim of opening file, such as creating new file, appending or reading. Default open mode is FORAPPEND. Here is the syntax to open files:

OPEN FILE {file_path} [FORNEW|FORREAD|FORAPPEND] [FILEID { fileid }];OPEN FILE {file_path} [FORNEW|FORREAD|FORAPPEND] [FILEID { fileid }];

CLOSE FILE command'ı dosyayı kapatır. Default olarak hiçbir argument almaz çünkü zaten açılmış olan dosyayı kapatır. İşte syntax:CLOSE FILE command closes the file. As default it takes no argument because it closes file which already opened. Here is the syntax:

CLOSE FILE [FILEID { fileid }];CLOSE FILE [FILEID { fileid }];

Tüm temel file operation'lar server tarafında gerçekleştirilir. Ancak client tarafı dosyalara erişmeye izin verilir. Sistem, client tarafı dosyayı server'a kopyalar ve operation'dan sonra client'a gönderir. Open mode nedeniyle file transfer gerekli değilse sistem açılan dosyayı kopyalamaz. Database transaction'larında client tarafında dosyalara erişilmesi önerilmez. EnableDBTransactionUnityCheck configuration'ı nedeniyle, sistem bir database transaction içinde client tarafında dosyaya erişirken bir warning mesajı gösterebilir. Daha fazla detay için lütfen ilgili bölümlere bakın. İşte file open mode'lara göre operation'ı gösteren matrix:All basic file operations are performed on server side. But it is allowed to access client side files. System copies client side file to server and sends to client after the operation. If file transfer is not necessary due to open mode system does not copy opened file. On database transactions it is not recommended to access files on client side. Due to EnableDBTransactionUnityCheck configuration system may show an warning messages when accessing file in client side inside a database transaction. For more detail please see related sections. Here is the matrix that shows the operation due to file open modes:

FORREADFORAPPENDFORNEW
OPEN FILECopy file from client to server and openCopy file from client to server and openJust open file
CLOSE FILEJust close fileClose file. Copy file from server to clientClose file. Copy file from server to client.

Hem CLOSE FILE hem OPEN FILE command'ları, operation başarısız olursa SYS_STATUS'u 1'e ayarlar. Ayrıca SYS_STATUSERROR error mesajına ayarlanır. İşte var olmayan bir dosyayı okumaya çalışan bir örnek. Var olmayan bir dosyayı okumak bir hatadır, ancak var olmayan bir dosyaya append etmek hata değildir. Tüm file operation'lar gerekli folder'ları otomatik olarak oluşturur, bu yüzden var olmayan folder'ları kullanmak hata değildir (kullanıcının gerekli izinlere sahip olması koşuluyla). İşte dosya açma/kapatmanın başarılı ve başarısız denemelerini gösteren iki örnek:Both CLOSE FILE and OPEN FILE commands set SYS_STATUS to 1, if operation fails. Also SYS_STATUSERROR is set to error message. Here is an example that tries to read an unexisting file. Reading an unexisting file is an error, but appending to an unexisting file is not error. All file operations automatically creates required folders, so using unexisting folders is not an error (provided that user have required permissions). Here is two examples that shows successful and unsuccessful attempts of opening/closing files:

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRINGVAR3; STRING STRINGVAR3;

STRPATH = '*C:\TMP\UnknownFile.txt';STRPATH = '*C:\TMP\UnknownFile.txt';

STRINGVAR3 = 'Open File: ';STRINGVAR3 = 'Open File: ';

OPEN FILE STRPATH FORREAD;OPEN FILE STRPATH FORREAD;

IF SYS_STATUS == 0 THENIF SYS_STATUS == 0 THEN

STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10);

ELSEELSE

STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10);

ENDIF;ENDIF;

STRINGVAR3 = STRINGVAR3 + 'Close File: ';STRINGVAR3 = STRINGVAR3 + 'Close File: ';

CLOSE FILE;CLOSE FILE;

IF SYS_STATUS == 0 THENIF SYS_STATUS == 0 THEN

STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10);

ELSEELSE

STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10);

ENDIF;ENDIF;

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRINGVAR3; STRING STRINGVAR3;

STRPATH = '*C:\TMP\NewFile.txt';STRPATH = '*C:\TMP\NewFile.txt';

STRINGVAR3 = 'Open File: ';STRINGVAR3 = 'Open File: ';

OPEN FILE STRPATH FORNEW;OPEN FILE STRPATH FORNEW;

IF SYS_STATUS == 0 THENIF SYS_STATUS == 0 THEN

STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10);

ELSEELSE

STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10);

ENDIF;ENDIF;

STRINGVAR3 = STRINGVAR3 + 'Close File: ';STRINGVAR3 = STRINGVAR3 + 'Close File: ';

CLOSE FILE;CLOSE FILE;

IF SYS_STATUS == 0 THENIF SYS_STATUS == 0 THEN

STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'successful' + TOCHAR(10);

ELSEELSE

STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10); STRINGVAR3 = STRINGVAR3 + 'failed!' + TOCHAR(10);

ENDIF;ENDIF;

Tüm açık dosyalar programcı tarafından kapatılmalıdır; başka bir deyişle, file operation'lar bittikten sonra açık kalan dosyalar TROIA programlama hatası olarak kabul edilir.All open files must be closed by programmer, in other words; open files after file operations end are considered TROIA programming errors.

Birden Fazla Dosya ile ÇalışmaWorking With Multiple Files

FILEID, hem OPEN FILE hem CLOSE FILE command'ları için opsiyonel bir argument'tır. Açılan dosya için benzersiz bir isim tanımlar. Default olarak, sistem birden fazla dosyayı eşzamanlı açmaya izin vermez. İşte geçersiz bir file operation; lütfen bu örneğin neden mantıksal olarak geçersiz olduğunu bulmaya çalışın.FILEID is optional argument for both OPEN FILE and CLOSE FILE commands. It defines a unique name for opened file. As default, system allow does not allow opening multiple files concurrently. Here is an invalid file operation, please try to find why this sample is an invalid logically.

/* !!! Warning: This is an invalid code *//* !!! Warning: This is an invalid code */

OBJECT:OBJECT:

STRING STRPATH1, STRING STRPATH1,

STRING STRPATH2; STRING STRPATH2;

STRPATH1 = '*C:\TMP\NewFile1.txt';STRPATH1 = '*C:\TMP\NewFile1.txt';

STRPATH2 = '*C:\TMP\NewFile2.txt';STRPATH2 = '*C:\TMP\NewFile2.txt';

OPEN FILE STRPATH1 FORNEW;OPEN FILE STRPATH1 FORNEW;

OPEN FILE STRPATH2 FORNEW;OPEN FILE STRPATH2 FORNEW;

/* do something on files, part 1 *//* do something on files, part 1 */

CLOSE FILE;CLOSE FILE;

/* do somehing on files, part 2 *//* do somehing on files, part 2 */

CLOSE FILE;CLOSE FILE;

Programcılar birinciyi kapatmadan önce başka bir dosya açmak isterse, her command için FILEID sağlamalıdır. FILEID benzersiz bir id'dir ve operation'dan hangi dosyanın etkileneceğini gösterir. FILEID sağlanmazsa, sistem default bir file id kullanır. Birden fazla dosyayı eşzamanlı açmak için doğru kod aşağıdadır; bu örnekte sistem her close denemesinde hangi dosyanın kapatılacağını bilebilir.If you programmers want to open another file before closing first one, they must be provide FILEID for each command. FILEID is a unique id and shows which file will be affected from the operation. If FILEID is not provided, system uses a defult file id. Correct code to open multiple files concurrently is below, in this example system is able to know which file will be closed on each close attempt.

OBJECT:OBJECT:

STRING STRPATH1, STRING STRPATH1,

STRING STRPATH2; STRING STRPATH2;

STRPATH1 = '*C:\TMP\NewFile1.txt';STRPATH1 = '*C:\TMP\NewFile1.txt';

STRPATH2 = '*C:\TMP\NewFile2.txt';STRPATH2 = '*C:\TMP\NewFile2.txt';

OPEN FILE STRPATH1 FORNEW FILEID F1;OPEN FILE STRPATH1 FORNEW FILEID F1;

OPEN FILE STRPATH2 FORNEW FILEID F2;OPEN FILE STRPATH2 FORNEW FILEID F2;

/* do something on files, part 1 *//* do something on files, part 1 */

CLOSE FILE FILEID F2;CLOSE FILE FILEID F2;

/* do somehing on files, part 2 *//* do somehing on files, part 2 */

CLOSE FILE FILEID F1;CLOSE FILE FILEID F1;

Her dosya erişiminin, hangi dosyanın değiştirileceğini veya okunacağını belirlemek için bir FILEID parametresi gerektirdiği açıktır, bu yüzden tüm file manipulation command'ları FILEID parametresi alır. Lütfen file ile ilgili command'larda FILEID syntax'ına dikkat edin.As it is obvious that each file access requires a FILEID parameter, to determine which file will be modified or read, so all file manipulation commands get FILEID parameter. Please focus on FILEID syntax in file related commands.

Dosya Yazma & Dosya OkumaWriting Files & Reading Files

Yazma ve okuma, en çok kullanılan ve önemli file manipulation operation'larıdır. Diğer programlama dillerinde olduğu gibi, dosyaları okumadan veya yazmadan önce dosya açılmalıdır.Writing and reading are the most used and important file manipulation operations. Like other programming languages, before reading or writing files, file must be opened.

Dosya YazmaWriting Files

Dosya yazmak için PUT command'ı kullanılır. PUT, CODEPAGE parametresiyle encoding'i destekler; bu encoding (utf-8, utf-16 vb.) verilen text'i byte'lara dönüştürürken kullanılır. Encoding sağlanmazsa sistem default olarak ISO8859_9 kullanır. Her PUT command'ı, verilen parametrelerin sonuna yeni bir satır (\n) ve carriage return (\r) karakteri ekler. Bu iki endline karakterini devre dışı bırakmak için NODENDOFLINE opsiyonel parametresi kullanılır.To write files PUT command is used. PUT supports encoding with CODEPAGE parameter, this encoding (utf-8, utf-16 etc) is used while converting given text to bytes. If encoding is not provided system uses ISO8859_9 as default encoding. Each PUT command adds a new line (\n) and carriage return (\r) character to the end of given parameters. To disable these two endline characters NODENDOFLINE optional parameter is used.

PUT {valuelist} [CODEPAGE {encoding}] [NOENDOFLINE] [FILEID {fileid}];PUT {valuelist} [CODEPAGE {encoding}] [NOENDOFLINE] [FILEID {fileid}];

İşte PUT command'ının farklı varyasyonlarını kullanan bir örnek kod. Lütfen dosya içeriğini kontrol edin ve kod ile trace'ini karşılaştırın.Here is a sample code which uses different variations of PUT command. Please check file content and compare with the code and its trace.

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

OBJECT:OBJECT:

STRING STRVALUE; STRING STRVALUE;

STRVALUE = 'This is ';STRVALUE = 'This is ';

STRPATH = '*C:\TMP\SourceFile3.txt';STRPATH = '*C:\TMP\SourceFile3.txt';

OPEN FILE STRPATH FORNEW;OPEN FILE STRPATH FORNEW;

PUT 'This is first line';PUT 'This is first line';

PUT STRVALUE, 'second line';PUT STRVALUE, 'second line';

PUT STRVALUE NOENDOFLINE;PUT STRVALUE NOENDOFLINE;

PUT 'third line';PUT 'third line';

PUT STRVALUE, 'fifth line' CODEPAGE 'ISO8859_9';PUT STRVALUE, 'fifth line' CODEPAGE 'ISO8859_9';

CLOSE FILE;CLOSE FILE;

PUT command'ının ayrıca bir id'ye sahip dosyaları yazmak için FILEID seçeneği vardır.PUT command also has FILEID option to write files which have an id.

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRPATH2; STRING STRPATH2;

STRPATH = '*C:\TMP\SourceFile4.txt';STRPATH = '*C:\TMP\SourceFile4.txt';

STRPATH2 = '*C:\TMP\SourceFile5.txt';STRPATH2 = '*C:\TMP\SourceFile5.txt';

OPEN FILE STRPATH FORNEW FILEID 'F1';OPEN FILE STRPATH FORNEW FILEID 'F1';

OPEN FILE STRPATH2 FORNEW FILEID 'F2';OPEN FILE STRPATH2 FORNEW FILEID 'F2';

PUT 'This is first file' FILEID 'F1';PUT 'This is first file' FILEID 'F1';

PUT 'This is second file' FILEID 'F2';PUT 'This is second file' FILEID 'F2';

CLOSE FILE FILEID 'F1';CLOSE FILE FILEID 'F1';

CLOSE FILE FILEID 'F2';CLOSE FILE FILEID 'F2';

Dosya OkumaReading Files

GET {variablelist} [CODEPAGE {encoding}] [FILEID {fileid}];GET {variablelist} [CODEPAGE {encoding}] [FILEID {fileid}];

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRINGVAR1, STRING STRINGVAR1,

STRING STRINGVAR3; STRING STRINGVAR3;

STRINGVAR3 = '';STRINGVAR3 = '';

STRPATH = '*C:\TMP\SourceFile3.txt';STRPATH = '*C:\TMP\SourceFile3.txt';

OPEN FILE STRPATH FORREAD;OPEN FILE STRPATH FORREAD;

WHILE 1WHILE 1

BEGINBEGIN

GET STRINGVAR1; GET STRINGVAR1;

IF STRINGVAR1 == '' THEN IF STRINGVAR1 == '' THEN

BREAK; BREAK;

ENDIF; ENDIF;

STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/'; STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/';

ENDWHILE;ENDWHILE;

CLOSE FILE;CLOSE FILE;

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRPATH2; STRING STRPATH2;

STRINGVAR3 = '';STRINGVAR3 = '';

STRPATH = '*C:\TMP\SourceFile4.txt';STRPATH = '*C:\TMP\SourceFile4.txt';

STRPATH2 = '*C:\TMP\SourceFile5.txt';STRPATH2 = '*C:\TMP\SourceFile5.txt';

OPEN FILE STRPATH FORREAD FILEID 'F1';OPEN FILE STRPATH FORREAD FILEID 'F1';

OPEN FILE STRPATH2 FORREAD FILEID 'F2';OPEN FILE STRPATH2 FORREAD FILEID 'F2';

WHILE 1WHILE 1

BEGINBEGIN

GET STRINGVAR1 FILEID 'F1'; GET STRINGVAR1 FILEID 'F1';

IF STRINGVAR1 == '' THEN IF STRINGVAR1 == '' THEN

BREAK; BREAK;

ENDIF; ENDIF;

STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/'; STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/';

ENDWHILE;ENDWHILE;

STRINGVAR3 = STRINGVAR3 + TOCHAR(10);STRINGVAR3 = STRINGVAR3 + TOCHAR(10);

WHILE 1WHILE 1

BEGINBEGIN

GET STRINGVAR1 FILEID 'F2'; GET STRINGVAR1 FILEID 'F2';

IF STRINGVAR1 == '' THEN IF STRINGVAR1 == '' THEN

BREAK; BREAK;

ENDIF; ENDIF;

STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/'; STRINGVAR3 = STRINGVAR3 + STRINGVAR1 + '/';

ENDWHILE;ENDWHILE;

CLOSE FILE FILEID 'F1';CLOSE FILE FILEID 'F1';

CLOSE FILE FILEID 'F2';CLOSE FILE FILEID 'F2';

..getblock..getblock

GETBLOCK {variable}, {delimiter} [CODEPAGE {encoding}] [FILEID {fileid}];GETBLOCK {variable}, {delimiter} [CODEPAGE {encoding}] [FILEID {fileid}];

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

STRPATH = '*C:\TMP\SourceFile3.txt';STRPATH = '*C:\TMP\SourceFile3.txt';

OPEN FILE STRPATH FORREAD;OPEN FILE STRPATH FORREAD;

GETBLOCK STRINGVAR3,' is ';GETBLOCK STRINGVAR3,' is ';

STRINGVAR3 = STRINGVAR3 + TOCHAR(10);STRINGVAR3 = STRINGVAR3 + TOCHAR(10);

CLOSE FILE;CLOSE FILE;

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

STRPATH = '*C:\TMP\SourceFile3.txt';STRPATH = '*C:\TMP\SourceFile3.txt';

OPEN FILE STRPATH FORREAD;OPEN FILE STRPATH FORREAD;

GETBLOCK STRINGVAR3,'';GETBLOCK STRINGVAR3,'';

STRINGVAR3 = STRINGVAR3 + TOCHAR(10);STRINGVAR3 = STRINGVAR3 + TOCHAR(10);

CLOSE FILE;CLOSE FILE;

Dosya KopyalamaCopying Files

OBJECT:OBJECT:

STRING STRSOURCEPATH, STRING STRSOURCEPATH,

STRING STRDESTPATH; STRING STRDESTPATH;

STRSOURCEPATH = '*C:\TMP\SourceFile3.txt';STRSOURCEPATH = '*C:\TMP\SourceFile3.txt';

STRDESTPATH = '*C:\TMP\SourceFile3_Copy.txt';STRDESTPATH = '*C:\TMP\SourceFile3_Copy.txt';

COPYFILE STRSOURCEPATH INTO STRDESTPATH;COPYFILE STRSOURCEPATH INTO STRDESTPATH;

Diğer Dosya & Dizin Operation'larıOther File & Directory Operations

Bir Dizindeki Dosyaları ListelemeListing Files in a Directory

FILELIST {directorypath} TO {targettable};FILELIST {directorypath} TO {targettable};

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

STRPATH = '*C:\TMP\';STRPATH = '*C:\TMP\';

DESTROYTABLE TMPTABLE;DESTROYTABLE TMPTABLE;

FILELIST STRPATH TO TMPTABLE;FILELIST STRPATH TO TMPTABLE;

SET TMPTABLE TO TABLE TMPTABLE;SET TMPTABLE TO TABLE TMPTABLE;

Bir dizin/dosyanın var olup olmadığını kontrol etmek için RETURNVALUE okunmalıdır. Var olmayan bir dizin/dosya durumunda 'notexist' olarak ayarlanır.To check whether a file directory exists of not, you must read RETURNVALUE. In case of not existing file directory it will be set to ‘notexist’.

IF RETURNVALUE == ‘notexist’ THENIF RETURNVALUE == ‘notexist’ THEN

RETURN 0;RETURN 0;

ENDIF;ENDIF;

Dosya Varlığını Kontrol EtmeChecking File Existence

Bir dosyanın var olup olmadığını kontrol etmek için FILEEXISTS command'ı kullanılmalıdır. Bu, dosya varlığını kontrol etmenin daha hızlı yoludur. Bu command, 5.02.05 062001 sonrası sürümlerde desteklenir.To check whether a file exists or not, you must use FILEEXISTS command. This is the faster way of checking file existence. This command is supported on the versions after 5.02.05 062001.

FILEEXISTS {filepath};FILEEXISTS {filepath};

OBJECT:OBJECT:

STRING STRINGVAR1; STRING STRINGVAR1;

STRPATH = '*C:\TMP\myfile.txt';STRPATH = '*C:\TMP\myfile.txt';

FILEEXISTS STRINGVAR1;FILEEXISTS STRINGVAR1;

IF SYS_STATUS THENIF SYS_STATUS THEN

STRINGVAR3 = 'File does not exist.'; STRINGVAR3 = 'File does not exist.';

ELSEELSE

STRINGVAR3 = 'File exists.'; STRINGVAR3 = 'File exists.';

ENDIF;ENDIF;

Dosya SilmeDeleting Files

DELTEFILE {filepath};DELTEFILE {filepath};

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

STRPATH = '*C:\TMP\SourceFile3_Copy.txt';STRPATH = '*C:\TMP\SourceFile3_Copy.txt';

DELETEFILE STRPATH;DELETEFILE STRPATH;

Dosya Digest'lemeDigesting Files

DIGESTFILE {path} INTO {targetsymbol} [USING {hashingalgorithm}];DIGESTFILE {path} INTO {targetsymbol} [USING {hashingalgorithm}];

OBJECT:OBJECT:

STRING STRPATH; STRING STRPATH;

STRPATH = '*C:\TMP\SourceFile3.txt';STRPATH = '*C:\TMP\SourceFile3.txt';

COPYFILE STRPATH INTO 'SourceFileOnServer.txt';COPYFILE STRPATH INTO 'SourceFileOnServer.txt';

DIGESTFILE 'SourceFileOnServer.txt' INTO STRINGVAR3 USING 'SHA1';DIGESTFILE 'SourceFileOnServer.txt' INTO STRINGVAR3 USING 'SHA1';

DELETEFILE 'SourceFileOnServer.txt';DELETEFILE 'SourceFileOnServer.txt';

DESTROYTABLE TMPTABLE;DESTROYTABLE TMPTABLE;

FILELIST '.' TO TMPTABLE;FILELIST '.' TO TMPTABLE;

SET TMPTABLE TO TABLE TMPTABLE;SET TMPTABLE TO TABLE TMPTABLE;

SORT TMPTABLE ON NAME;SORT TMPTABLE ON NAME;

Dosya SıkıştırmaFile Compression

ZIPFILE {filepath} INTO {targetzipfile};ZIPFILE {filepath} INTO {targetzipfile};

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRPATH2; STRING STRPATH2;

STRPATH = '*C:\TMP\SourceFile4.txt';STRPATH = '*C:\TMP\SourceFile4.txt';

STRPATH2 = '*C:\TMP\SourceFile5.txt';STRPATH2 = '*C:\TMP\SourceFile5.txt';

COPYFILE STRPATH INTO 'ServerSourceFile4.txt';COPYFILE STRPATH INTO 'ServerSourceFile4.txt';

COPYFILE STRPATH2 INTO 'ServerSourceFile5.txt';COPYFILE STRPATH2 INTO 'ServerSourceFile5.txt';

ZIPFILE 'ServerSourceFile4.txt|ServerSourceFile5.txt' INTO 'Demo.zip';ZIPFILE 'ServerSourceFile4.txt|ServerSourceFile5.txt' INTO 'Demo.zip';

COPYFILE 'Demo.zip' INTO '*C:\TMP\Demo.zip';COPYFILE 'Demo.zip' INTO '*C:\TMP\Demo.zip';

DELETEFILE 'Demo.zip';DELETEFILE 'Demo.zip';

UNZIPFILE {zipfilepath} INTO {targetdirectory};UNZIPFILE {zipfilepath} INTO {targetdirectory};

OBJECT:OBJECT:

STRING STRPATH, STRING STRPATH,

STRING STRPATH2; STRING STRPATH2;

STRPATH = '*C:\TMP\UnzippedSourceFile4.txt';STRPATH = '*C:\TMP\UnzippedSourceFile4.txt';

STRPATH2 = '*C:\TMP\UnzippedSourceFile5.txt';STRPATH2 = '*C:\TMP\UnzippedSourceFile5.txt';

COPYFILE '*C:\TMP\Demo.zip' INTO 'Demo.zip';COPYFILE '*C:\TMP\Demo.zip' INTO 'Demo.zip';

UNZIPFILE 'Demo.zip' INTO '.\';UNZIPFILE 'Demo.zip' INTO '.\';

COPYFILE 'ServerSourceFile4.txt' INTO STRPATH;COPYFILE 'ServerSourceFile4.txt' INTO STRPATH;

COPYFILE 'ServerSourceFile5.txt' INTO STRPATH2;COPYFILE 'ServerSourceFile5.txt' INTO STRPATH2;

DELETEFILE 'Demo.zip';DELETEFILE 'Demo.zip';

Örnek 1: BASE64 Encoding'de Image OkumaExample 1: Read Image in BASE64 Encoding

İşte bir png dosyasını base64 olarak okuyan ve bu image'ı embedded image olarak gösteren bir HTM dokümanı oluşturan örnek kod.Here is a samplecode that reads a png file as base64 and builds a HTM document that shows this image as embedded image.

/*read binary image*//*read binary image*/

OPEN FILE '*C:\TMP\sampleimage.png';OPEN FILE '*C:\TMP\sampleimage.png';

GETBLOCK STRINGVAR3,'' CODEPAGE 'BASE64';GETBLOCK STRINGVAR3,'' CODEPAGE 'BASE64';

CLOSE FILE;CLOSE FILE;

/*add html tags *//*add html tags */

STRINGVAR3 = '<img src="data:image/png;base64, ' + STRINGVAR3 + '"/>';STRINGVAR3 = '<img src="data:image/png;base64, ' + STRINGVAR3 + '"/>';

/*write html file*//*write html file*/

OPEN FILE '*C:\TMP\sampleimage.htm' FORNEW;OPEN FILE '*C:\TMP\sampleimage.htm' FORNEW;

PUT STRINGVAR3 CODEPAGE 'UTF-8';PUT STRINGVAR3 CODEPAGE 'UTF-8';

CLOSE FILECLOSE FILE

Örnek 2: Dosya YazmaExample 2: Writing Files

Aşağıdakileri yapan bir parça TROIA kodu yazın:Write a piece of TROIA code that:

Örnek 3: Birden Fazla Dosya ile ÇalışmaExample 3: Working With Multiple Files

Önceki alıştırma için yazdığınız kodu değiştirin ve şunu yapan bir TROIA kodu yazın:Modify the code that you write for previous exercise and write a TROIA code that

formatword [4]formatword [4]

another [7]another [7]

and [3] another [7]and [3] another [7]

Lütfen kodunuzun iki dosyayı eşzamanlı açtığından emin olun.Please be sure that your code opens two files concurrently.

Örnek 4: Zip İçeriği HazırlamaExample 4: Prepare Zip Content