Build string of variables

Discuss and share scripts and script files...
Post Reply
hermhart
Posts: 213
Joined: 13 Jan 2015 18:41

Build string of variables

Post by hermhart »

Is it possible to build a variable depending on your choices?

I'm trying to build a variable so if I have an inputselect box that has 3 choices and I choose check box 2, I want the result to be $1*$3, if I choose checkbox 3 the result would be $1$2*, or if I choose checkboxes 1 and 2 the result would be **$3 (or perhaps a single "*" instead of 2 wildcards in a row). The purpose of this is that I have a regex of several groups of characters and I want the checkbox to result in the use of the asterisk '*' to be a wildcard wherever I choose but keep the other variables (groups).

$1*$3 would be: group1*group3
$1$2* would be: group1group2*
**$3 would be: **group3

What I have so far, but am stuck. :(

Code: Select all

       $source = inputselect("Choose an option:<crlf>(select only one) ", "1|2|3|4|5", , 2+8192, , 300, 262, Selection);

        if ($source=="1") {
          $result = "$1";
          }
       else {
          $result = "*";
          }

       if ($source=="2") {
          $result = "$result" . "$2";
          }
       else {
          $result = $result . "*";
          }

       if ($source=="3") {
          $result = "$result" . "$3";
          }
       else {
          $result = $result . "*";
          }
          

highend
Posts: 13274
Joined: 06 Feb 2011 00:33

Re: Build string of variables

Post by highend »

No clue why this "design" is chosen... Why exactly do you need different variables instead of storing the result in one (e.g. separating values via "|")?

Apart from that you are talking about using the dereference operator (help file!)
Some sample code:

Code: Select all

    $folders = "C:\Temp|D:\Temp";

    while ($i++ < gettoken($folders, "count", "|")) { // Two time loop
        // '$folder' is the new first part of the variable here, not a reference to an existing variable!
        // This first part must be SINGLE quoted, otherwise it could reference an already existing variable
        // "$folder", which would NOT work!
        $var   = '$folder_' . $i;
        $value = gettoken($folders, $i, "|");
        *$var  = $value;
    }
    echo $folder_2;

One of my scripts helped you out? Please donate via Paypal

hermhart
Posts: 213
Joined: 13 Jan 2015 18:41

Re: Build string of variables

Post by hermhart »

Not sure that I understand it all, but I will try to break it down and figure it out if I can.

Thank you for the help!

PeterH
Posts: 2776
Joined: 21 Nov 2005 20:39
Location: Germany

Re: Build string of variables

Post by PeterH »

hermhart wrote: 31 Oct 2018 00:21 Not sure that I understand it all, but I will try to break it down and figure it out if I can.

Thank you for the help!
You may want to have a look at Help: Scripting / Dereference Operator :idea:
W7(x64) SP1 German
( +WXP SP3 )

yusef88
Posts: 1123
Joined: 28 Jan 2013 03:50
Location: Windows 8.1 32-bit

Re: Build string of variables

Post by yusef88 »

highend wrote: 31 Oct 2018 00:06

Code: Select all

    $folders = "C:\Temp|D:\Temp";

    while ($i++ < gettoken($folders, "count", "|")) { // Two time loop
        // '$folder' is the new first part of the variable here, not a reference to an existing variable!
        // This first part must be SINGLE quoted, otherwise it could reference an already existing variable
        // "$folder", which would NOT work!
        $var   = '$folder_' . $i;
        $value = gettoken($folders, $i, "|");
        *$var  = $value;
    }
    echo $folder_2;

Sorry for the question
how can make $folder_2, $folder_3 and so on a global variables?

highend
Posts: 13274
Joined: 06 Feb 2011 00:33

Re: Build string of variables

Post by highend »

By putting a global in front of *$var = $value;

But to get the value of such a variable e.g. inside a function (without passing the variable to it), you would need a global statement there as well for that specific variable => Makes no sense

For what exactly would you need such a variable as a global? Show code...
One of my scripts helped you out? Please donate via Paypal

yusef88
Posts: 1123
Joined: 28 Jan 2013 03:50
Location: Windows 8.1 32-bit

Re: Build string of variables

Post by yusef88 »

Actually what I need are just two variable values. I was asking out of curiosity if such thing is possible i can modify the script to meet my needs. don't bother thanks

Code: Select all

"_Initialize"
	Global $ffmpeg = "D:\master\ffmpeg-n6.0-win32-shared\bin\ffmpeg.exe";
	if ( <drop> ) { $files = "<drop |>"; }
	else { $files = "<selitems |>"; }
    while ($i++ < gettoken($files, "count", "|")) {
        $var   = '$file' . $i;
        $value = gettoken($files, $i, "|");
        *$var  = $value;}
        
"combine"
	run lax("$ffmpeg" -i "$file1" -i "$file2" -c:v copy -c:a copy "<curbase>"_mux.mkv)

"example"
	$ffmpeg $file1 $file2 $file3

highend
Posts: 13274
Joined: 06 Feb 2011 00:33

Re: Build string of variables

Post by highend »

The script doesn't work that way. You need to have global declarations in each subsection for each variable that you've defined as global in "_Initialize"
And if you only ever need 2 variables I see no need to use a loop and dereferencing...

Code: Select all

"_Initialize"
    Global $ffmpeg = "D:\master\ffmpeg-n6.0-win32-shared\bin\ffmpeg.exe";
    if ( <drop> ) { $files = "<drop |>"; }
    else { $files = "<selitems |>"; }
    while ($i++ < gettoken($files, "count", "|")) {
        $var   = '$file' . $i;
        $value = gettoken($files, $i, "|");
        global *$var  = $value;
    }
    // Alternative instead of the dereferencing above for two files
    global $file1 = gettoken(<selitems |>, 1, "|");
    global $file2 = gettoken(<selitems |>, 2, "|");

"combine"
    Global $ffmpeg, $file1, $file2;
    run lax("$ffmpeg" -i "$file1" -i "$file2" -c:v copy -c:a copy "<curbase>"_mux.mkv)
...
If there are really multiple file variables you could use the loop but in this case I wouldn't use a multi-section script but instead a normal one and create popupmenu() entries, eval & execute them.
One of my scripts helped you out? Please donate via Paypal

yusef88
Posts: 1123
Joined: 28 Jan 2013 03:50
Location: Windows 8.1 32-bit

Re: Build string of variables

Post by yusef88 »

this seems simple and easy
thank you for explaining

Code: Select all

"_Initialize"
    Global $ffmpeg = "D:\master\ffmpeg-n6.0-win32-shared\bin\ffmpeg.exe";
    global $file1 = gettoken(<selitems |>, 1, "|");
    global $file2 = gettoken(<selitems |>, 2, "|");
    
"combine"
    Global $ffmpeg, $file1, $file2;
    run lax("$ffmpeg" -i "$file1" -i "$file2" -c:v copy -c:a copy "<curbase>"_mux.mkv)
...

Post Reply