using indexof & substring

Plesae don't laugh. I'm fair at VBScript and totally clueless at Javascript. I've got to very slightly modify a page based on some Javascript that was written by someone else.

Here's the error I'm encountering:
  Microsoft JScript runtime error '800a01b6'
  Object doesn't support this property or method
  blah blah blah at line 100


There is a variable called PathStr, which is a partial path/filename. An example of a possible value of PathStr is:
     progressimages\7997-80720.13\255 KP - Aslab.JPG

I need to extract just the Filename without the extension. The code segment I've tried to use is:

// The next line is Line 100 where the error occurs.
   var offset1 = PathStr.indexof("\");
   var offset1 = PathStr.indexof(".jpg");
   var Caption = PathStr.substring(offset1, offset2);

Using the PathStr example value given above, I believe I'd end up with "7997-80720.13\255 KP - Aslab", then I'd do it again to get down to just the filename.

But dammed if I can see what's wrong with the offset1 and offeset2 lines. Just a syntax error or am I on the wrong track completely?

Or maybe there is a better, simpler way altogether?

 - Bill.
Who is Participating?
StormyWatersConnect With a Mentor Commented:
Oh, and indexof should be 'indexOf', javascript is case sensitive. 'substr' remains the same, I believe.
Two things:

substring is actually substr, and you're defining 'offset1' twice instead of having the second as 'offset2'
var offset1 = PathStr.indexof("\");

it thinks there isn't another quote because a backslash escapes a quote, so you'd need to do something like:

var offset1 = PathStr.indexof("\\");
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

This will get you closer.

<script language="JavaScript">
   var PathStr = "progressimages\7997-80720.13\255 KP - Aslab.JPG".toString().quote();
   var lcPathStr = PathStr.toLowerCase();
   var offset1 = lcPathStr.indexOf("\\", lcPathStr.indexOf("\\") + 1) + 1;
   var offset2 = lcPathStr.indexOf(".jpg");
   var Caption = PathStr.substring(offset1, offset2);

I'm still trying to determing why the 255 shows as "x".  I think it's because of the .quote() function, which I have used here to escape the \ with another \.

This is a great example of why you really shouldn't start file names with numbers...
Could you try this :

fileName = PathStr.substr(PathStr.lastIndexOf('\\')+1);

.. I think this will get you what you want, However, Im in class right now andI havent tested it :(

Cheers hope this works.
or you could forget the indexOf/substr junk and use a regex:

  PathStr = "progressimages\\7997-80720.13\\255 KP - Aslab.JPG"
  fileName = PathStr.match(/^.*?\\([^\\]*?)\.[^.]+$/)[1];
oh.. you also need to define your var PathName with double slashes. or use the unescape to get away form the \'s.

Cheers, the following works I tested it.

function doThis()
     var PathStr = "progressimages\\7997-80720.13\\255 KP - Aslab.JPG";
     var fileName;
          fileName = PathStr.substr(PathStr.lastIndexOf('\\')+1);
     alert( fileName );
<input type="button" onClick="doThis();" value="doThis()">
BillHelyAuthor Commented:
Well, everybody helped and I got some better ideas, but unfortunately I can't split the money.

So in all fairness I'll have to accept the first answer that actually resolved the error I was getting at the time.

The immediate problem was the case of "indexof" instead of 'indexOf', which StormyWaters was the first to point out.

Thanks everyone. Doubtless I'll be back :-(

 - Bill
Note: You can "split the money."  There is a link to "split" at the bottom.
BillHelyAuthor Commented:

> Note: You can "split the money."  There is a link to "split" at the bottom.

My apologies to all. I didn't realize that. So much for making "assumptions"! Thanks for pointing it out --- I'll know for next time.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.