Avatar billede priestie Nybegynder
09. oktober 2004 - 13:43 Der er 12 kommentarer

Læse en binær fil i javascript

Jeg skal have udlæst nogle værdier fra en fil der ikke kan læses ordentligt som en text fil. Den kan godt læses, men når jeg udskriver det indlæste, er det langt fra det hele der kommer med.
Jeg vil tro at det er fordi filen er binær, og der derfor er nogle meget specielle tegn der ikke kan interpretes af textFileReader'en i javascript.
Jeg bruger følgende til at indlæse filen:

  var fso = new ActiveXObject("Scripting.FileSystemObject");
  // ...
  // Finder filen
  // ...
  stream = file.OpenAsTextStream(1); // ForReading
  for (var q=1 ; !stream.AtEndOfStream ; q++) {
    document.write("<br>Line number: " + q + "<br>");
    document.write(stream.ReadLine());
  }

Når jeg åbner filen i ekspelvis wordpad kommer alle liniern med, men ikke når jeg indlæser den med JS på denne måde.

Filen der skal åbnes er en fil der definere en test, og som nornmalt indlæses i et akustisk testprogram. Jeg skal bruge nogle af oplysningerne i filen til at tegne referencegrafer med.

Jeg har søgt på nettet dfter en løsning, men jeg er bange for det ikke lader sig gøre. Nogen forslag?
Avatar billede arne_v Ekspert
09. oktober 2004 - 22:23 #1
Kan du lave:

var stm = new ActiveXObject("ADODB.Stream");

i JavaScript ?

(fordi Stream kan både læse og skrive binære filer)
Avatar billede arne_v Ekspert
09. oktober 2004 - 22:27 #2
Avatar billede priestie Nybegynder
10. oktober 2004 - 13:02 #3
Hvis jeg indsætter følgende i mit script
  var ado_stream = new ActiveXObject("ADODB.Stream");
får jeg følgende fejl:
  ERROR: Automation-serveren kan ikke oprette objektet

Jeg er ikke så velbevandret i javascript at jeg ved hvad denne fejl betyder.

Jeg skylder lige at sige at det er et script der kører lokalt. Det er altså ikke et script der kører på en server, men det burde jo ikke være et problem.

Jeg ved godt det kunne laves meget simpelt i Java, VB eller et andet programmeringssprog, men jeg er blevet pålagt at det skal laves i javascript.
Avatar billede olebole Juniormester
10. oktober 2004 - 18:55 #4
<ole>

Denne her fungerer fint:

function binaryRead(path) {
    var stream, binaryStream;
   
    stream = new ActiveXObject("ADODB.Stream");
    stream.Type = 1;
    stream.Open();
        stream.LoadFromFile(path);
        binaryStream = stream.Read();
    stream.close();
   
    return binaryStream;
}

Af sikkerhedsgrunde kan IE ikke med standardindstillinger oprette det pågældende objekt. Det kan du komme udenom ved at benytte en special instans af IE - en HTA (HyperText Application).
'Cowboy-versionen' er, at du bare giver din HTML-fil '.hta' som extension - i stedet for '.htm' eller '.html'. En mere seriøs tilgang er at læse lidt om HTA'er her:
  http://msdn.microsoft.com/library/default.asp?url=/workshop/author/hta/hta_node_entry.asp

Check menuen i vestre side ... der gemmer sig meget interessant :)

/mvh
</bole>
Avatar billede priestie Nybegynder
10. oktober 2004 - 20:41 #5
olebole:
okay, nu bliver det lidt langt ude, men det lader til at forslaget virker umiddelbart.
Nu har jeg så et objekt der bliver returneret fra den fine funktion du viser i din kommentar, men hvor finder jeg dokumentation. Jeg ved ikke en dyt om hvad det er for et objekt, og hvordan jeg får læste data ud fra det. Er det blot et bytearray, eller hva'?
Avatar billede olebole Juniormester
11. oktober 2004 - 01:37 #6
Det er MS' ADO (ActiveX Data Object) og er yderst ofte benyttet - ikke mindst i forbindelse med databaser. Det findes der bunker af doku på ... både hos MS og på nettet i almindelighed.
Ja, der er tale om et byte-array.
Nej, det er ikke 'lidt langt ude'. Til gengæld er det temmelig langt ude at ville læse binære filer med HTML/JavaScript  ;o)
Avatar billede priestie Nybegynder
12. oktober 2004 - 21:04 #7
Det er også netop det jeg mener med langt ude, at det er langt jeg må strække mig for at få enderne til at nå sammen, når det skal laves i javascript. Jeg havde håbet på at det kunne holdes i en almindelig *.html fil, og at jeg netop ikke skulle til at rode med en helt anden indgangsvinkel.
Kunne man eventuelt lokke olebole til at smide et link til noget dok. hvor access motoderne til ADO objektet er beskrevet. Det fungere ikke som et almindeligt javascript array.
Avatar billede olebole Juniormester
12. oktober 2004 - 22:12 #8
Næææhh ... du skal nok have gang i noget konvertering - og du skal jo også finde udaf, hvordan de binære data skal parses i den pågældende fil. Jeg har på fornemmelsen, dit projekt indebærer en hel del mere, end du forestiller dig  :)

Her er i det mindste indgangen til ADO:
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/dasdkadooverview.asp
Avatar billede priestie Nybegynder
16. oktober 2004 - 21:18 #9
Hvis jeg bare kan få de enkelte bytes læst ud, og derefter analysere dem en af gangen, burde det ikke være det store problem at få de data ud jeg skal bruge.
Det hele er dog noget mere indviklet end jeg havde troet.
Selvom det er indviklet, kan det åbenbart lade sig gøre, så jeg kan næsten ikke gøre andet en at bede olebole om at smide et svar ;-)
Avatar billede cbb Nybegynder
25. oktober 2004 - 21:20 #10
Skulle I ha' tanker om at involvere jer økonomisk med olebole, så kontakt for egen skyld undertegnede eller ekspertens chefredaktør Robert Vanglo, der er orienteret om baggrunden for denne utraditionelle henvendelse.
Med venlig hilsen bjarne@bekker.dk
Avatar billede olebole Juniormester
25. oktober 2004 - 21:26 #11
Så stopper du dine evindelige tilsvininger, Bjarne! Kan du ikke finde ud af det, må jeg bede Eksperten om at stoppe dig. Grow up ...!!!
Avatar billede priestie Nybegynder
26. oktober 2004 - 17:58 #12
cbb:
Jeg forstår ikke rigtig... hvad er det for en utraditionel henvendelse du henviser til i denne tråd?

olebole:
Vil du ikke have dine point?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester