Go Back   CodingForums.com > :: Client side development > JavaScript programming

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 06-23-2002, 04:47 PM   PM User | #1
neil.c
New Coder

 
Join Date: Jun 2002
Location: yorkshire, uk
Posts: 65
Thanks: 0
Thanked 0 Times in 0 Posts
neil.c is an unknown quantity at this point
Question using external text files

i'm new to scripting but i've picked up the basics pretty well. i need to know if you can get text out of an external file. i know you can use an iframe or a text/x-scriptlet object (im not bothered about cross-browser compatibility, i only use IE5), but these are only good for dumping html files into a box on the page.
i really want to be able to read a .txt file from my site and use the data in it in my script. i want to use this for navigation links, to save me having to edit every page on my site whenever i add a new page. the text file would basically include a list of all the pages. i don't just want a list of all the pages on each page, i could easy use an iframe for that - i want next and previous buttons so i need to use script to process the list.
my programming experience is in simple compiled software, using vb, and bbcbasic before that (heaven forbid!!) so i'm used to just being able to open a file and read its data. can you do this in script programming? how?

---
neil.c
neil.c is offline   Reply With Quote
Old 06-23-2002, 05:01 PM   PM User | #2
whackaxe
Senior Coder

 
Join Date: Jun 2002
Location: paris, france
Posts: 1,216
Thanks: 0
Thanked 0 Times in 0 Posts
whackaxe is an unknown quantity at this point
sorry to tell you this neil but javascript cant read externel files. if you wan that type of "depth" then oyu should learn PHP or PERL/CGI. php isnt to hard to learn if you knwo the basics to programming in most languages but you have to have a) a free host with PHP instaled or b) a server installed on your computer
__________________
photoshop too expensive? use the GIMP! www.gimp.org
whackaxe is offline   Reply With Quote
Old 06-23-2002, 05:10 PM   PM User | #3
neil.c
New Coder

 
Join Date: Jun 2002
Location: yorkshire, uk
Posts: 65
Thanks: 0
Thanked 0 Times in 0 Posts
neil.c is an unknown quantity at this point
ok. thanks for clearing that up.
neil.c is offline   Reply With Quote
Old 06-23-2002, 05:14 PM   PM User | #4
mpjbrennan
Regular Coder

 
Join Date: Jun 2002
Location: Newcastle, England
Posts: 178
Thanks: 0
Thanked 0 Times in 0 Posts
mpjbrennan is an unknown quantity at this point
Javascript can get data from an external .txt file by importing the content as a javascript variable. Visit the following for an example:
http://www.patrick-brennan.com/javas...ort_table.html

The Gedcom analyser script on that site also uses this technique, but goes into a lot more processing of the imported data using regexps.

These are technical curiosities however; if you want to import a lot of data from external files I would suggest you use xml.

Patrick
mpjbrennan is offline   Reply With Quote
Old 06-23-2002, 05:46 PM   PM User | #5
whackaxe
Senior Coder

 
Join Date: Jun 2002
Location: paris, france
Posts: 1,216
Thanks: 0
Thanked 0 Times in 0 Posts
whackaxe is an unknown quantity at this point
never tought of that, but for reading/writing to files php is still better
__________________
photoshop too expensive? use the GIMP! www.gimp.org
whackaxe is offline   Reply With Quote
Old 06-23-2002, 05:54 PM   PM User | #6
neil.c
New Coder

 
Join Date: Jun 2002
Location: yorkshire, uk
Posts: 65
Thanks: 0
Thanked 0 Times in 0 Posts
neil.c is an unknown quantity at this point
ok i looked at that eg and i can see how the txt file is loaded in the src of the first <script> tag. but the syntax of javascript object variables is a bit strange to me (so many dots!) and its hard to see what each of the variables is for in this script. how is the text file actually read? what property of which object?

here is the script:

<script type="text/javascript" src="stocks.txt"> //datasource for table
</script>
<script type="text/javascript">

/*created by Patrick Brennan - January 2001*/

var table = "abcdefghijhijklmnopqrstuvwxyz"
var a, i, j, k, m, n, x, content, current

function sort(x){
x = x.id.charAt(0)
for (i = 1; i <= records-1; i++){
for (j = 1; j <= records-1; j++){
k = j + 1
if (isNaN(document.getElementById(x + j).innerHTML)){
if (document.getElementById(x + j).innerHTML.toUpperCase() > document.getElementById(x + k).innerHTML.toUpperCase()){
a = document.getElementById(x + j).innerHTML
document.getElementById(x + j).innerHTML = document.getElementById(x + k).innerHTML
document.getElementById(x + k).innerHTML = a
for (n = 0; n <= header.length-1; n++){
if (table.charAt(n) != x){
m = table.charAt(n)
a = document.getElementById(m + j).innerHTML
document.getElementById(m + j).innerHTML = document.getElementById(m + k).innerHTML
document.getElementById(m + k).innerHTML = a
}}}}
else{
if (parseFloat(document.getElementById(x + j).innerHTML) < parseFloat(document.getElementById(x + k).innerHTML)){
a = document.getElementById(x + j).innerHTML
document.getElementById(x + j).innerHTML = document.getElementById(x + k).innerHTML
document.getElementById(x + k).innerHTML = a
for (n = 0; n <= header.length-1; n++){
if (table.charAt(n) != x){
m = table.charAt(n)
a = document.getElementById(m + j).innerHTML
document.getElementById(m + j).innerHTML = document.getElementById(m + k).innerHTML
document.getElementById(m + k).innerHTML = a
}}}}}}}

content = ""
content += "<h1>Sortable Table - Textfile Datasource</h1>"
content += "<div align='center'><table cellspacing=0><tr>"
for (i = 0; i <= header.length-1; i++){
content += "<th id='" + table.charAt(i) + "0" + "' onmouseup='sort(this); return true'><button hidefocus onmouseup='this.blur()'>" + header[i] + "</button></th>"
}
content += "</tr>"
for (i = 0; i <= records-1; i++){
j = i + 1
content += "<tr>"
for (k = 0; k <= header.length-1; k++){
current = eval("record" + j)
content +="<td id='" + table.charAt(k) + j + "'>" + current[k] + "</td>"
}
content += "</tr>"
}
content += "</table></div>"
document.write(content)

</script>
</head>


thanks for your help.
__________________
neil.c
neil.c is offline   Reply With Quote
Old 06-23-2002, 09:24 PM   PM User | #7
neil.c
New Coder

 
Join Date: Jun 2002
Location: yorkshire, uk
Posts: 65
Thanks: 0
Thanked 0 Times in 0 Posts
neil.c is an unknown quantity at this point
it's clicked finally. your use of a .txt file confused me into thinking it was a data file, but when i thought of opening the file to check this, i realised it was actually a .js file with the wrong extension. not that it matters to the computer, it just confused me.
so you can't use a data file as such, be it text or csv format; but you can create a bit of external javascript including the bare minimum i.e. directly filling the arrays.
your example is fine for its job because the names of the variables don't matter at all. but ideally i want an array for the link titles and a separate array for urls. to do this i could fill the arrays by:

linktitle = ["page 1", "page 2", "page3" /*etc.*/ ]
linkurl = ["page1.htm", "page2.htm", "page3.htm" /*etc.*/ ]

but i will be having more pages than will fit on one line, and it will be hard to find which title goes to which url when i'm editing the data script file.
i really want to declare each title and url together, separately. this would end up looking like:

linktitle[0] = "page 1"
linkurl[0] = "page1.htm"
linktitle[1] = "page 2"
linkurl[1] = "page2.htm"

which i am happy to do. but could it be even easier?
a long time ago, i learnt bbc basic. this had a very useful feature: the DATA statement. imagine there is such thing as BBCBasicScript (don't tell me there is!!!), i would do this:

numberoflinks = 10
DATA page 1, page1.htm
DATA page 2, page2.htm
//etc.. (up to page 10 in this eg)

see how much easier this would be to change later? the only number i have to change is the numberoflinks variable, not the array index. i don't even need quotes round strings.
then to fill my arrays (this would never need changing):

FOR fillarrays = 0 TO numberoflinks
READ linktitle(fillarrays) // the READ statement gets the next DATA item, in order of declaration.
READ linkurl(fillarrays)
NEXT

i know this is probably asking too much but does javascript have any kind of data storage feature? or am i stuck with explicitly declaring every variable?
thanks for all the help, i have already gained a much better understanding of scripting.
oh, and how is jscript different to javascript? why have they got (almost) the same name?
__________________
neil.c
neil.c is offline   Reply With Quote
Old 06-24-2002, 04:47 PM   PM User | #8
mpjbrennan
Regular Coder

 
Join Date: Jun 2002
Location: Newcastle, England
Posts: 178
Thanks: 0
Thanked 0 Times in 0 Posts
mpjbrennan is an unknown quantity at this point
Hi neil.c

1. Javascript does not have file handling properties.

2. Jscript is Microsoft's version of Javascript - it does have file handling properties but they only work in Internet Explorer (or the Windows scripting host) so they are not generally useful for the Internet (though very useful on an Intranet). If you want to play with these then you can find a full JScript reference on the MS site.

3. You can actually read a .txt file - have a look at this script http://www.patrick-brennan.com/javas...Manalyzer.html - the source here isn't simply a .js file with a changed suffix - it's actually a GEDCOM file with a changed suffix.

4. Whackaxe - I agree with your comments about PHP - it's my own favourite, but of course you need to have server-side access and I don't know whether neil.c has.

Patrick

Last edited by mpjbrennan; 06-24-2002 at 04:53 PM..
mpjbrennan is offline   Reply With Quote
Old 06-24-2002, 05:50 PM   PM User | #9
whackaxe
Senior Coder

 
Join Date: Jun 2002
Location: paris, france
Posts: 1,216
Thanks: 0
Thanked 0 Times in 0 Posts
whackaxe is an unknown quantity at this point
well if he doesnt they he should make his own. the thought of setting up a server may sound daunting(it was for me) but if you get a nice user-friendly server like abyss from www.aprelium.com or another package from www.firepages.com.au then you should be set for scripting in php without hassle!
__________________
photoshop too expensive? use the GIMP! www.gimp.org
whackaxe is offline   Reply With Quote
Old 06-24-2002, 06:35 PM   PM User | #10
tamienne
Regular Coder

 
Join Date: Jun 2002
Location: Delaware, USA
Posts: 138
Thanks: 0
Thanked 0 Times in 0 Posts
tamienne is an unknown quantity at this point
neil.c

you can do something like this in your external file...

link[0]=new Array{'linktitle', 'linkurl'};
link[1]=new Array{'linktitle', 'linkurl'};
link[2]=new Array{'linktitle', 'linkurl'};
link[3]=new Array{'linktitle', 'linkurl'};
link[4]=new Array{'linktitle', 'linkurl'};

then reference it in your code like..

link[x][0] is the link title
link[x][1] is the link url

I believe that should work.
tamienne is offline   Reply With Quote
Old 06-24-2002, 07:48 PM   PM User | #11
neil.c
New Coder

 
Join Date: Jun 2002
Location: yorkshire, uk
Posts: 65
Thanks: 0
Thanked 0 Times in 0 Posts
neil.c is an unknown quantity at this point
thanks to everyone.
my server doesn't offer any server-side stuff, but like I said, I'm not particularly bothered about NS or IE3- being compatible.

I will use a .js file, like this:

var linkname = new Array()
var linkurl = new Array()
var i = 0
//the bit above stays as it is.

linkname[i] = "page 1"
linkurl[i] = "page1.htm"
i++
linkname[i] = "page 2"
linkurl[i] = "page2.htm"
i++

etc..

this way, i can easily add new pages without worrying about the array index number. using an explicit increment is a bit clumsy but it makes it easier to add and remove links. and i think it should be ok with other browsers anyway.

thanks again.
__________________
neil.c
neil.c is offline   Reply With Quote
Old 06-25-2002, 02:21 AM   PM User | #12
whammy
Senior Coder

 
Join Date: Jun 2002
Location: 41° 8' 52" N -95° 53' 31" W
Posts: 3,660
Thanks: 0
Thanked 0 Times in 0 Posts
whammy is an unknown quantity at this point
Neil, you should really consider using a host (or hosting yourself) that can use a server-side language. You obviously have the understanding required.

Not to mention it will ease your troubles quite a bit.

__________________
Former ASP Forum Moderator - I'm back!

If you can teach yourself how to learn, you can learn anything. ;)
whammy is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 02:32 AM.


Advertisement
Log in to turn off these ads.