Solved

using indexof & substring

Posted on 2004-09-14
11
464 Views
Last Modified: 2010-05-18
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

EXPLANATION:
~~~~~~~~~

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?

TIA
 - Bill.
0
Comment
Question by:BillHely
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +2
11 Comments
 
LVL 13

Expert Comment

by:StormyWaters
ID: 12060478
Two things:

substring is actually substr, and you're defining 'offset1' twice instead of having the second as 'offset2'
0
 
LVL 13

Accepted Solution

by:
StormyWaters earned 50 total points
ID: 12060480
Oh, and indexof should be 'indexOf', javascript is case sensitive. 'substr' remains the same, I believe.
0
 
LVL 6

Expert Comment

by:ren_b
ID: 12060484
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("\\");
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 13

Expert Comment

by:cLFlaVA
ID: 12060584
This will get you closer.

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

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 \.
0
 
LVL 13

Expert Comment

by:cLFlaVA
ID: 12060597

This is a great example of why you really shouldn't start file names with numbers...
0
 
LVL 5

Expert Comment

by:darksinclair
ID: 12060635
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 :(

Sorry,
Cheers hope this works.
0
 
LVL 6

Expert Comment

by:ren_b
ID: 12060655
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];
  alert(fileName);
0
 
LVL 5

Expert Comment

by:darksinclair
ID: 12060662
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.

<HTML>
<SCRIPT>
function doThis()
{
     var PathStr = "progressimages\\7997-80720.13\\255 KP - Aslab.JPG";
     alert(PathStr);
     var fileName;
          fileName = PathStr.substr(PathStr.lastIndexOf('\\')+1);
     alert( fileName );
}
</SCRIPT>
<HEAD></HEAD>
<BODY>
<input type="button" onClick="doThis();" value="doThis()">
</BODY>
</HTML>
0
 

Author Comment

by:BillHely
ID: 12061113
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
0
 
LVL 13

Expert Comment

by:cLFlaVA
ID: 12065181
Note: You can "split the money."  There is a link to "split" at the bottom.
0
 

Author Comment

by:BillHely
ID: 12070002

> 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.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
JavaScript Loan Calculator Error 3 34
Timer on div 5 23
Duplicate Elements with JS / jQuery 3 24
sort Multi-dimensional array 6 9
Avoid defining the variables in the global scope; trying to define them in a local function scope. Because:   • Look-up is performed every time a variable is accessed.   • Variables are resolved backwards from most specific to least specific scope…
In Part 1 (http://www.experts-exchange.com/Programming/Languages/Scripting/JavaScript/A_7849-Hex-Maze.html) we covered the hexagonal maze basics -- how the cells are represented in a JavaScript array and how the maze is displayed.  In this part, we'…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

740 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question