Jan 07
Do you ever write random bits of code and wonder why you are doing it? Something that seems worth it at the time and then you really wonder?
I just did this with a class that I call TokenObject
. The goal of this trivial class is to take a string, and give me a nice way to get pieces out of it. Normally I would use split
and grab the right piece, but I was doing so much conversion from “command line string” to an object, that I ended up with something that lets me do this:
var userpass = "dion password"; var up = new TokenObject(userpass, {params: "user pass"}); // up.user; // up.pass; // Can also get via: up.param('user'); up.param(0);
Funny huh? :)
/* * TokenObject: Given a string, make a token object that holds positions and has name access */ var TokenObject = function(input, options) { this._input = input; this._options = options; this._splitterRegex = new RegExp(this._options.splitBy || '\\s+'); this._pieces = input.split(this._splitterRegex); if (this._options.params) { // -- create a hash for name based access this._nametoindex = {}; var namedparams = this._options.params.split(' '); for (var x = 0; x < namedparams.length; x++) { this._nametoindex[namedparams[x]] = x; if (!this._options['noshortcutvalues']) { // side step if you really don't want this this[namedparams[x]] = this._pieces[x]; } } } } TokenObject.prototype.param = function(index) { return (typeof index == "number") ? this._pieces[index] : this._pieces[this._nametoindex[index]]; } TokenObject.prototype.length = function() { return this._pieces.length; }
January 12th, 2009 at 9:47 pm
Check these two vbscript versions of extracting a string or part of it from a larger string. e.g from a string “Monday, January, 08, 2009″ it extracts “Monday, Jan, 08,2009″.
a=(FormatDateTime(Date(),1))
length=len(a)
pos=instr (a, “,”)
l=pos+4
one=left(a,l)
pos1=instrrev(a, “,”)
l1=(length-pos1)+3
two=right(a,l1)
msgbox one & ” ” & two
Another version:
dim d(0), arr(40), farr(26), fa(26)
a=(FormatDateTime(Date(),1))
length=len(a)
p=length
‘PUTTING STRING a INTO ARRAY arr
for i=1 to length
t=left(a,1)
a=right(a,length-i)
arr(i)=t
next
‘EXTRACTING UPTILL 4 CHARACTERS AFTER FIRST COMA FOR EXAMPLE Thursday, Jan
for i=1 to length
if arr(i) = “,” then
length = i+4
exit for
end if
next
for i=1 to length
fa(i)=arr(i)
next
‘NOW f1 CONTAINS FOR EXAMPLE Thursday, Jan
f1=join(fa)
‘EXTRACTING LAST 8 CHARACTERS FROM ARRAY arr FOR EXAMPLE 08, 2009
for e=1 to 8
farr(e)=arr(p)
p=p-1
next
xx=join (farr)
final_str=trim(f1) & “, ” & trim(strreverse(xx))
msgbox final_str
May 7th, 2009 at 9:33 am
Uhm, I don’t get it… whats the purpose here?
If you want quick easy access to bits of info.. stuff them in an Object… it works like a Map… and can store strings, ints, functions and more.
var data = {};
data.user = ‘David’;
data.pass = ’secret’;
data.age = 37;
data.spillTheBeans = function(){return ‘User:’ + this.user + ‘ Pass:’ + this.pass + ‘ Age:’ + this.age};
If you just want to simplify the “Map” to have get/set methods you can wrap it up into a simple class…
function MapThing(){
this.data = {};
this.get = function(key){
return this.data[key];
};
this.set = function(key, value){
this.data[key] = value;
};
this.length = function(){
var count = 0;
for(var x in this.data){
count++;
}
return count;
};
}