Solved

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

Posted on 2004-03-28
12
267 Views
Last Modified: 2013-11-13
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
Comment
Question by:Caiapfas
12 Comments
 
LVL 10

Assisted Solution

by:Kavar
Kavar earned 100 total points
ID: 10699094
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699127
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699219
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
ScreenConnect 6.0 Free Trial

At ScreenConnect, partner feedback doesn't fall on deaf ears. We collected partner suggestions off of their virtual wish list and transformed them into one game-changing release: ScreenConnect 6.0. Explore all of the extras and enhancements for yourself!

 

Expert Comment

by:Dustman2000
ID: 10699544
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699792
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699797
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699859
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10699878
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10700056
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
 
LVL 11

Accepted Solution

by:
lbertacco earned 400 total points
ID: 10700780
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10700993
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
 
LVL 2

Author Comment

by:Caiapfas
ID: 10700997
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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Here we come across an interesting topic of coding guidelines while designing automation test scripts. The scope of this article will not be limited to QTP but to an overall extent of using VB Scripting for automation projects. Introduction Now…
A short article about a problem I had getting the GPS LocationListener working.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

825 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