Kun je met javascript een tekstbestand in een array zetten?

Status
Niet open voor verdere reacties.

KeesdeOude

Gebruiker
Lid geworden
29 mei 2008
Berichten
35
Kan met javascript een tekstbestand in een array worden gezet?
Ik las de discussie die werd aangezwengeld door jasperdj: "Kan javascript een txt bestand aanpassen?" ingezonden op 19-11-2007.
Naar aanleiding hiervan schreef ik het volgende stukje javascript, onderdeel van een groter programma:

code:
var titel=new Array();
var tekst,i,tmax,tgroep,aantal;
function LeesData() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var ForReading = 1;
var a = fso.OpenTextFile('D:\\html\\mp3\'s\\Menu.dat',ForReading);
while (!a.AtEndOfStream) {
titel=a.ReadLine( );
if(titel=="stop") {break}
alert(titel);
i+=1;
}
a.Close();
tmax=i-1;alert(tmax);
}
--- rest van het programma.
einde code

LeesData wordt aangeroepen met 'onLoad'. Het alert scherm laat alle regels van de betreffende file zien, de funcctie doet daar wat verwacht wordt.
alert(tmax) geeft NaN aan, als het totale programma loopt geeft het een foutmelding, titel bestaat niet of is geen object!
Wat gaat er fout? Binnen de functie zie ik elke regel van Menu.dat, buiten de functie bestaat het array niet. Binnen de functie krijgt tmax ook geen waarde, maar dat is evt. aan te passen met array.length.
Kan een ActiveXObject geen waarde doorgeven?
 
Laatst bewerkt:
Je geeft nergens een begin waarde voor i. Overigens is je code lastig te lezen.

Als je het zo opschrijft zijn eventuele fouten veel makkelijker te herkennen:
Code:
var
	titel		= new Array();
	tekst		= "",
	i		= 0,
	tmax		= 0,
	tgroep	= 0,
	aantal	= 0;

function LeesData()
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var ForReading = 1;
  var a = fso.OpenTextFile('D:\\html\\mp3\'s\\Menu.dat',ForReading);
  while (!a.AtEndOfStream)
  {
    titel[i]=a.ReadLine();
    if(titel[i]=="stop")
      break;
    alert(titel[i]);
    i++;
  }
  a.Close();
  tmax = i-1;
  alert(tmax);
}
 
De eerder genoemde code zal alleen in IE werken aangezien in FF geen ActiveXObject bestaat.
 
Dan kun je ook geen Ajax gebruiken. En inderdaad, ActiveX objects werken alleen in IE. Maar aangezien jij alleen lokaal wilt werken is dat geen punt.

Overigens, als alles lokaal is kun je veel beter werken met een normale programeer taal als C/C++ of een Basic variant. Veel minder beperkingen, maar wel net wat lastiger om te leren.

Maar los daarvan, werkt je script nu goed, als je i een beginwaarde geeft?

Je kunt trouwens ook array.push gebruiken en achteraf gewoon array.length uitlezen.


Code:
var
	titel		= new Array();
	tekst		= "",
	curLine	= "",
	tmax		= 0,
	tgroep	= 0,
	aantal	= 0;

function LeesData()
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var ForReading = 1;
  var a = fso.OpenTextFile('D:\\html\\mp3\'s\\Menu.dat',ForReading);
  while (!a.AtEndOfStream)
  {
    curLine=a.ReadLine();
    if(curLine=="stop")
      break;
    titel.push(curLine);
    alert(curLine);
  }
  a.Close();
  tmax = titel.length-1;
  alert(tmax);
}
 
Laatst bewerkt:
Waar hebben jullie het over? :confused:
Die code van rodsdot.com kijkt toch eerst of je IE of FF gebruikt, en past het daarna aan.
En als je lokale bestanden wilt inladen kan je even goed een lokaal pad ingeven.
Ik heb die code al geprobeerd en het werkt perfect, zelfs met FF, zelfs lokaal.
 
Laatst bewerkt:
Ajax kan geen lokale bestanden lezen. Het hele idee achter Ajax is HTTP requests maken via Javascript.

In Firefox heb je wel Components.classes["@mozilla.org/file/local;1"], maar daarvoor moeten eerst een hoop beveiligings instellingen uitgezet worden.
 
Dan kun je ook geen Ajax gebruiken. En inderdaad, ActiveX objects werken alleen in IE. Maar aangezien jij alleen lokaal wilt werken is dat geen punt.

Overigens, als alles lokaal is kun je veel beter werken met een normale programeer taal als C/C++ of een Basic variant. Veel minder beperkingen, maar wel net wat lastiger om te leren.

Maar los daarvan, werkt je script nu goed, als je i een beginwaarde geeft?

Je kunt trouwens ook array.push gebruiken en achteraf gewoon array.length uitlezen.


Code:
var
	titel		= new Array();
	tekst		= "",
	curLine	= "",
	tmax		= 0,
	tgroep	= 0,
	aantal	= 0;

function LeesData()
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var ForReading = 1;
  var a = fso.OpenTextFile('D:\\html\\mp3\'s\\Menu.dat',ForReading);
  while (!a.AtEndOfStream)
  {
    curLine=a.ReadLine();
    if(curLine=="stop")
      break;
    titel.push(curLine);
    alert(curLine);
  }
  a.Close();
  tmax = titel.length-1;
  alert(tmax);
}

Beste Glest!
Deze push werkt fantastisch! Ik had ruim 43 k aan data als array in een programma staan, nu staan de gegevens in een DAT file en zo hoort dat volgens mij. Ik ben hier heel blij mee. Mijn javascript kennis komt uit de Javascript Bible van Goodman Morrison en van websites als Henry Bottomley's Javascript Examples. Nogmaals bedankt!
Ouwe Kees.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan