• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 275
  • Last Modified:

.js script edit/help, I need it to take the "STATE" column out of a .csv file and input it in every .htm file for a perl script..

Ok, Background:

With some excellant help, I was able to make a script that takes data out of columns in a .csv file and changes a htm template and then saves it under the venue name(all lower case and spaces replaced with _'s)

Now I need it to input the venue state in <!--VENUE STATE--> format at the VERY top of every page so a perl script can come through and read it and input it on this page as links( http://www.ticketstogo.com/venues/states/index.htm )under the appropriate state which will also have the <!--VENUE STATE--> for recognition and inserting of the link..

addendum : I know other scripting languages could do all this much quicker, and I know htm is a old and dying language, but for this project I have chosen it, so plz .js and .htm help only.

The .js file that reads the .csv file and changes the template.....All i need it to do now is insert <!--VENUE STATE--> at the top of all the pages it creates.

-------------------------------------------------------------------------

var template = "C:\\aa\\venuetemplate.htm";
var list = "C:\\aa\\venues.csv";
var dstFolder = "C:\\aa\\venues\\";

var fso =new ActiveXObject("Scripting.FileSystemObject");

//read template
var templFile = fso.OpenTextFile(template, 1);
var templText = templFile.ReadAll();
templFile.close();
WScript.StdOut.WriteLine("Template length is: " + templText.length);

//process venue list
var listFile = fso.OpenTextFile(list, 1);
var head=listFile.ReadLine(); //skip header
WScript.StdOut.WriteLine("Header line: " + head);
while(!listFile.AtEndOfStream) {
  var line=listFile.ReadLine();
  WScript.StdOut.WriteLine("processing line: " + line);
  var fields=line.split(",");   // Comma Delimited
//var fields=line.split("\t");  // Tabs
  WScript.StdOut.WriteLine("fields#: " + fields.length);
  try {
    var VenueID=fields[0];
    WScript.StdOut.WriteLine("venue id: " + fields[0]);
    var VenueName=fields[1];    
    WScript.StdOut.WriteLine("venue name: " + fields[1]);
    var fname=VenueName.toLowerCase().replace(/ /g, "_") + ".htm";
    WScript.StdOut.WriteLine("output filename: " + fname);
    var dstFileFullname=fso.BuildPath(dstFolder, fname);
    WScript.StdOut.WriteLine("dest filename: " + dstFileFullname);
    var dstFile = fso.CreateTextFile(dstFileFullname, true);    
    dstFile.write(templText.replace(/_VENUE_NAME_/g, VenueName).replace(/_VENUE_ID_/g, VenueID));
    dstFile.close();
   }
   catch(e) {
    WScript.echo("Error processing venue id " + VenueID + " with name '" + VenueName + "'");
   }
               
}
listFile.close();





the .cvs file
http://www.ticketstogo.com/aadownload/venues.csv

and the template
http://www.ticketstogo.com/aadownload/venuetemplate.htm
0
Caiapfas
Asked:
Caiapfas
2 Solutions
 
KavarCommented:
unless I am really mistaking what you want change this line
dstFile.write(templText.replace(/_VENUE_NAME_/g, VenueName).replace(/_VENUE_ID_/g, VenueID));
to
dstFile.write("<!--VENUE STATE-->" & templText.replace(/_VENUE_NAME_/g, VenueName).replace(/_VENUE_ID_/g, VenueID));
0
 
CaiapfasAuthor Commented:
No, I dont want to replace/change anything, I want to add, I need the script to keep doing exactly what its doing right now, but i need the new function added... function being adding ("<!--VENUE STATE-->"  at the top of every page it creates from the csv file.

and it actually places VENUS STATE with the right venues state.
example : <!-- Texas --> for Hobby Center
0
 
CaiapfasAuthor Commented:
Ok, let me explain a little  more, there are 3 columns in the .csv file
VenueID      VenueName      State
right now the script it taking(line by line) VenueID and looking in the template and replaceing _VEUNE_ID_
then it taking VeuneName and replaceing _VENUE_NAME_
Now, what I would like to add is State handleing..
Take State column 3 and replace _STATE_ in the htm/template file.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
Dustman2000Commented:
var i = 0;
while(!listFile.AtEndOfStream) {
  var line=listFile.ReadLine();
  WScript.StdOut.WriteLine("processing line: " + line);
  var fields=line.split(",");   // Comma Delimited
//var fields=line.split("\t");  // Tabs
  WScript.StdOut.WriteLine("fields#: " + fields.length);
  try {
    var VenueID=fields[0];
    WScript.StdOut.WriteLine("venue id: " + fields[0]);
    var VenueName=fields[1];    
    WScript.StdOut.WriteLine("venue name: " + fields[1]);
    var fname=VenueName.toLowerCase().replace(/ /g, "_") + ".htm";
    WScript.StdOut.WriteLine("output filename: " + fname);
    var dstFileFullname=fso.BuildPath(dstFolder, fname);
    WScript.StdOut.WriteLine("dest filename: " + dstFileFullname);
    var dstFile = fso.CreateTextFile(dstFileFullname, true);    
    if(i==0){
       dstFile.write("<!--VENUE STATE-->\n");
    }
    dstFile.write(templText.replace(/_VENUE_NAME_/g, VenueName).replace(/_VENUE_ID_/g, VenueID));
    dstFile.close();
   }
   catch(e) {
    WScript.echo("Error processing venue id " + VenueID + " with name '" + VenueName + "'");
   }
   i++;
}
0
 
CaiapfasAuthor Commented:
no I dont want it to write <!--Venue state-->!!!!
I only want it to replace _STATE_ in the template, like it does _Venue_ID_ and _VENUENAME_, before it saves the file.
so it replaces _STATE_ with the correct state for that venue name and venue id....look at the csv file...
0
 
CaiapfasAuthor Commented:
the benefit of having it find and replace _STATE_ is I can have it put the correct state , anywhere on the page, like I can for _VENUE_NAME_ and _VENUE_ID_
0
 
CaiapfasAuthor Commented:
so in effect, I dont want to change the script at all, just add a handling for column 3 a.k.a States..
the script searchs the .csv file and then takes the data from column 1 (Venue ID) and does a search and replace in the template for _VENUE_ID_
then
for column 2 (VenueName) does a search and replace for _VENUE_NAME_
and NOW for column 3 (STATES) does a search and replace for _STATES_ in the template(NOTE: unless there is no third column then it ingnores this VAR) then saves the template as the VENUE name in all lower case and replaces spaces with _'s

I don't want the original script changed, unless necessary... just the new var added..
0
 
CaiapfasAuthor Commented:
so the only thing I need help with is

column 3 (STATES) I want it to do search and replace for _STATES_ in the template(NOTE: unless there is no third column then it ingnores this VAR)
0
 
CaiapfasAuthor Commented:
ok, fixed it

var template = "C:\\aa\\venuetemplate.htm";
var list = "C:\\aa\\venues2.csv";
var dstFolder = "C:\\aa\\venues\\";

var fso =new ActiveXObject("Scripting.FileSystemObject");

//read template
var templFile = fso.OpenTextFile(template, 1);
var templText = templFile.ReadAll();
templFile.close();
WScript.StdOut.WriteLine("Template length is: " + templText.length);

//process venue list
var listFile = fso.OpenTextFile(list, 1);
var head=listFile.ReadLine(); //skip header
WScript.StdOut.WriteLine("Header line: " + head);
while(!listFile.AtEndOfStream) {
  var line=listFile.ReadLine();
  WScript.StdOut.WriteLine("processing line: " + line);
  var fields=line.split(",");   // Comma Delimited
//var fields=line.split("\t");  // Tabs
  WScript.StdOut.WriteLine("fields#: " + fields.length);
  try {
    var VenueID=fields[0];
    WScript.StdOut.WriteLine("venue id: " + fields[0]);
    var VenueName=fields[1];    
    WScript.StdOut.WriteLine("venue name: " + fields[1]);
    var VenueState=fields[2];    
    WScript.StdOut.WriteLine("venue name: " + fields[1]);
    var fname=VenueName.toLowerCase().replace(/ /g, "_") + ".htm";
    WScript.StdOut.WriteLine("output filename: " + fname);
    var dstFileFullname=fso.BuildPath(dstFolder, fname);
    WScript.StdOut.WriteLine("dest filename: " + dstFileFullname);
    var dstFile = fso.CreateTextFile(dstFileFullname, true);    
    dstFile.write(templText.replace(/_VENUE_NAME_/g, VenueName).replace(/_VENUE_ID_/g, VenueID).replace(/_STATE_/g, VenueState));
    dstFile.close();
   }
   catch(e) {
    WScript.echo("Error processing venue id " + VenueID + " with name '" + VenueName + "'");
   }
               
}
listFile.close();



is this the proper way ???is the script ok?
0
 
lbertaccoCommented:
Caiapfas, you did it perfectly.
You just didn't update the line reporting what's going on that we added for debugging purposes.
That is
WScript.StdOut.WriteLine("venue name: " + fields[1]);
should be
WScript.StdOut.WriteLine("venue state: " + fields[2]);
But actually now that the script works, you could remove these lines alltogether.

Also I'd use _VENUE_STATE_ as the marker (rather than just _STATE_) for more uniformity.
0
 
CaiapfasAuthor Commented:
lbertacco,

Thank you so much, I learned how to add it to the script from your examples, I learn best that way.
will you check out this question? http://www.experts-exchange.com/Programming/Q_20935392.html
0
 
CaiapfasAuthor Commented:
ok
im trying to split the points betwen kavar and ibertaco, but i keep getting this error
Error
You may not Split Points for this question
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now