Difference between revisions of "ReNamer:Pascal Script:Reuse variable"
m (just clean up a bit) |
m (Add example to use single file to store many vars/values) |
||
Line 1: | Line 1: | ||
− | == This page is work in process!== | + | == --- This page is work in process! --- == |
+ | |||
+ | currently i just collect here a few information and POC proof of concept code. | ||
+ | |||
+ | I want to clean up this page later. | ||
+ | |||
+ | If you want to help please do so. | ||
+ | |||
+ | |||
+ | |||
+ | == Set/Get or Write/Read or Save/Load variable values == | ||
Line 16: | Line 26: | ||
− | ==First we take a look on the file approach. | + | == the file approach == |
+ | |||
+ | First we take a look on the file approach. | ||
We use simple plain text files to store the variable. | We use simple plain text files to store the variable. | ||
+ | |||
+ | === utilized function === | ||
The ReNamer PascalScript functions to write and read text files are: | The ReNamer PascalScript functions to write and read text files are: | ||
Line 64: | Line 78: | ||
+ | === script examples === | ||
− | == | + | ==== Store one value to one dedicated file ==== |
First rule in rule list:<br> | First rule in rule list:<br> | ||
Line 107: | Line 122: | ||
end. | end. | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | ====Store more then one value into a common file==== | ||
+ | |||
+ | Note this approach is to cumbersome for real use. <br> | ||
+ | Better use dedicated file for each var/value (see above). | ||
+ | |||
+ | |||
+ | |||
+ | We can also use FileAppendContent(); to add "NAME=VALUE" pairs to an single file<br> | ||
+ | and a routine to read the lines of that common vars.txt. | ||
+ | |||
+ | |||
+ | Here just as proof of concept: | ||
+ | |||
+ | Last rule in rule list:<br> | ||
+ | (add a line with "NAME=VALUE" pair) | ||
+ | FileAppendContent('den4b_vars.txt','LastFolder=' + ParentF + #13#10); | ||
+ | |||
+ | |||
+ | |||
+ | This 'den4b_vars.txt' could look now like: | ||
+ | LastIndex=10 | ||
+ | LastString=Vacation 2013 | ||
+ | LastFolder=Translits | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Other rules here in between<br> | ||
+ | -<br> | ||
+ | -<br> | ||
+ | -<br> | ||
+ | |||
+ | |||
+ | To get the wanted value i would use a code like this: | ||
+ | |||
+ | First rule in rule list:<br> | ||
+ | - read the vars.txt<br> | ||
+ | - split into lines<br> | ||
+ | - split line into 'name' and 'value'<br> | ||
+ | - check if 'name' is a wanted var name, if yes get the value<br> | ||
+ | |||
+ | var | ||
+ | vars,v:string; | ||
+ | Lines,CurrLine:TStringsArray; | ||
+ | i:integer; | ||
+ | |||
+ | begin | ||
+ | if(GetCurrentFileIndex=1)then | ||
+ | begin | ||
+ | if( WideFileExists('.\den4b_vars.txt') ) then | ||
+ | begin | ||
+ | vars := FileReadContent('.\den4b_vars.txt'); | ||
+ | ShowMessage('complete content:'+#10+vars); | ||
+ | Lines:= WideSplitString(vars, #13#10); | ||
+ | if( length(Lines) > 0 ) then | ||
+ | begin | ||
+ | for i:=0 to length(Lines)-1 do | ||
+ | begin | ||
+ | CurrLine := WideSplitString(Lines[i],'='); | ||
+ | v := CurrLine[0]; | ||
+ | //ShowMessage(v); | ||
+ | if ( WideCompareText( v, 'LastIndex' ) =0) then | ||
+ | ShowMessage( v + ' has value ' + CurrLine[1] ); | ||
+ | if ( WideCompareText( v, 'LastFolder' ) =0) then | ||
+ | ShowMessage( v + ' has value ' + CurrLine[1] ); | ||
+ | if ( WideCompareText( v, 'LastString' ) =0) then | ||
+ | ShowMessage( v + ' has value ' + CurrLine[1] ); | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | == the registry approach == | ||
+ | |||
+ | === Not recommended ! === | ||
+ | |||
+ | Not recommended ! | ||
+ | |||
+ | var | ||
+ | ECAreturn:string; | ||
+ | |||
+ | begin | ||
+ | // Add your code here | ||
+ | |||
+ | //Store/Write/Set: | ||
+ | ExecuteProgram('reg add HKCU\Software\den4b /v TestName1 /t REG_SZ /d "Test value 1" /f', true); | ||
+ | |||
+ | //Load/Read/Get: | ||
+ | ExecConsoleApp('reg query HKCU\Software\den4b /v Test6', ECAreturn); | ||
+ | ShowMessage(ECAreturn); | ||
+ | // | ||
+ | // ! REG.EXE VERSION 3.0 | ||
+ | // | ||
+ | // HKEY_CURRENT_USER\Software\den4b | ||
+ | // Test6 REG_SZ gut | ||
+ | // | ||
+ | //>---more code needed here to extract the value---< | ||
+ | end. | ||
− | -# | + | -# end |
Revision as of 14:28, 27 January 2013
--- This page is work in process! ---
currently i just collect here a few information and POC proof of concept code.
I want to clean up this page later.
If you want to help please do so.
Set/Get or Write/Read or Save/Load variable values
If you want to store a variable to reuse the value later you can read here a few tips.
For examples you can store the last used path, folder or file name or parts of them.
Also you may want to store an index number, or perhaps a list of the original file names.
There are two main techniques to store variable values: use the registry or use a temporary file on disc.
the file approach
First we take a look on the file approach.
We use simple plain text files to store the variable.
utilized function
The ReNamer PascalScript functions to write and read text files are:
FileWriteContent( "FileName" , "Content" );
FileAppendContent( "FileName" , "Content" );
FileReadContent("FileName");
FileCountLines("FileName");
FileReadLine( "FileName" , LineNum );
For "FileName" you can just use a name without a path to store the file into the ReNamer folder.
Example:
FileWriteContent( "FileName.txt" , "Content" );
FileWriteContent( ".\FileName.txt" , "Content" );
To use an full path to your ReNamer folder use the ReNamer PascalScript function "GetApplicationPath"
Example:
FileWriteContent( WideExtractFilePath(GetApplicationPath) + "FileName.txt" , "Content" );
You can use your private temp (temporary) folder in your profile
by using the ReNamer PascalScript function "WideGetTempPath"
Example:
FileWriteContent( WideGetTempPath + "FileName.txt" , "Content" );
Also you can access all system environment variables by using "WideGetEnvironmentVar"
Example:
UserName := WideGetEnvironmentVar('USERNAME');
script examples
Store one value to one dedicated file
First rule in rule list:
(GET stored variable 'LastFolder')
var
LastFold:string;
begin
if(GetCurrentFileIndex=1)then
if(WideFileExists(WideGetTempPath +'\den4b_LastFolder.txt')) then
LastFold := FileReadContent(WideGetTempPath +'den4b_LastFolder.txt');
//check if it works:
ShowMessage(LastFold);
end.
Other rules here in between
-
-
-
Last rule in rule list:
(SET variable 'LastFolder' to stored for later reuse)
var
ParentFold:string;
begin
if(GetCurrentFileIndex=GetTotalNumberOfFiles)then
begin
ParentFold := CalculateMetaTag(FilePath, 'File_FolderName');
FileWriteContent(WideGetTempPath + 'den4b_LastFolder.txt', ParentFold);
end;
//check if it works:
ExecuteProgram('notepad ' + WideGetTempPath + 'den4b_LastFolder.txt',false);
end.
Store more then one value into a common file
Note this approach is to cumbersome for real use.
Better use dedicated file for each var/value (see above).
We can also use FileAppendContent(); to add "NAME=VALUE" pairs to an single file
and a routine to read the lines of that common vars.txt.
Here just as proof of concept:
Last rule in rule list:
(add a line with "NAME=VALUE" pair)
FileAppendContent('den4b_vars.txt','LastFolder=' + ParentF + #13#10);
This 'den4b_vars.txt' could look now like:
LastIndex=10 LastString=Vacation 2013 LastFolder=Translits
Other rules here in between
-
-
-
To get the wanted value i would use a code like this:
First rule in rule list:
- read the vars.txt
- split into lines
- split line into 'name' and 'value'
- check if 'name' is a wanted var name, if yes get the value
var vars,v:string; Lines,CurrLine:TStringsArray; i:integer; begin if(GetCurrentFileIndex=1)then begin if( WideFileExists('.\den4b_vars.txt') ) then begin vars := FileReadContent('.\den4b_vars.txt'); ShowMessage('complete content:'+#10+vars); Lines:= WideSplitString(vars, #13#10); if( length(Lines) > 0 ) then begin for i:=0 to length(Lines)-1 do begin CurrLine := WideSplitString(Lines[i],'='); v := CurrLine[0]; //ShowMessage(v); if ( WideCompareText( v, 'LastIndex' ) =0) then ShowMessage( v + ' has value ' + CurrLine[1] ); if ( WideCompareText( v, 'LastFolder' ) =0) then ShowMessage( v + ' has value ' + CurrLine[1] ); if ( WideCompareText( v, 'LastString' ) =0) then ShowMessage( v + ' has value ' + CurrLine[1] ); end; end; end; end; end.
the registry approach
Not recommended !
Not recommended !
var ECAreturn:string; begin // Add your code here //Store/Write/Set: ExecuteProgram('reg add HKCU\Software\den4b /v TestName1 /t REG_SZ /d "Test value 1" /f', true); //Load/Read/Get: ExecConsoleApp('reg query HKCU\Software\den4b /v Test6', ECAreturn); ShowMessage(ECAreturn); // // ! REG.EXE VERSION 3.0 // // HKEY_CURRENT_USER\Software\den4b // Test6 REG_SZ gut // //>---more code needed here to extract the value---<
end.
-# end