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

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
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
A short article about problems I had with the new location API and permissions in Marshmallow
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
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…

743 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now