Hi All,
I have a string like
echo $var
D_PROC=20080723 I_REPROC=N C_TYPE_FILE=INBOUND
Now I want it be stored in an associative array so that when we
echo $arr[D_PROC] it should be 20080723
Hi All,
I have a string like
echo $var
D_PROC=20080723 I_REPROC=N C_TYPE_FILE=INBOUND
Now I want it be stored in an associative array so that when we
echo $arr[D_PROC] it should be 20080723
Normally, an array would have elements that are numbers. For example:
client[1]=Joe
client[2]=Kerry
So, you are trying to get to:
arr[D_PROC]=20080723
but, D_PROC is not representative of anything (it isn't a variable itself)
Please confirm.
I want to store it in an associative array where subscripts may be a string eg
arr[first]=1
arr[second]=2
......
so when we echo $arr[first] , it should give me 1
In PHP? No problem.
In Perl? Yep, we call those Hashes.
In very nearly any other language? Sure, with varying levels of straightforwardness.
In Bash? Not without some seriously-absurd buffoonery. It's almost always better to find another way to do it. Is this absolutely what you need, and no other approach will work?
Something like:
key="some_key" array[$(i=0; while [ x${arrayname[$i]} != x ]; do if [ x${arrayname[$i]} == x$key ]; then break; fi; export i=$(($i+1)); done; arrayname[$i]=$key; echo $i)]="value"
should work, but I kept running into scope issues with $arrayname. So:
key="some_key"; array[$(i=0; while [ x${arrayname[$i]} != x ]; do if [ x${arrayname[$i]} == x$key ]; then break; fi; export i=$(($i+1)); done; echo $i)]="value"
if [ x${arrayname[$i]} == x ]; then arrayname[$i]=$key; fi
Now, to retrieve, something like:
i=0; while [ x${arrayname[$i]} != x ]; do echo '$array['${arrayname[$i]}']="'${array[$i]}'"'; i=$(($i+1)); done
will retrieve all values, while
key="some_key"; i=0; while [ x${arrayname[$i]} != x ]; do if [ x${arrayname[$i]} == x$key ]; then echo ${array[$i]}; fi; i=$(($i+1)); done
will retrieve some_key.
Quite likely to break, full of holes, contains at least one bug, and generally inadvisable to use. Enjoy!
use perl:
$str="D_PROC=20080723 I_REPROC=N C_TYPE_FILE=INBOUND";
$str=~s/=| /,/g;
@str=split(",",$str);
for($i=0;$i<=($#str+1)/2-1;$i++){
$hash{$str[$i*2]}=$str[$i*2+1];
}
print $hash{'I_REPROC'},"\n";
How about if one of the value is null ie first_key=1 second_key= third_key=3.
Here the second_key is null.Is the perl script here going to read the values of second_key as " " or the string "third_key"