Michael: tabulatorgetrennte txt-Datei in Array (JS) einbinden

Hallo zusammen!

Ich habe folgendes Problewm:

Ich möchte eine durch Tabulator-getrennte txt-Datei in ein JavaScript-Array einbinden.

Mein Quelltext sieht in Auszügen so aus:

artikel[0]='10000 Papier Pergament 1.jpg bemerkung 1';
artikel[1]='10001 Papier Notizzettel 2.jpg bemerkung 2';

Und hier die dazugehörige txt-Datei (in Auszügen):

artikelnr kategorie beschreibung bild bemerkung
10000 Papier Pergament 1.jpg bemerkung 1
10001 Papier Notizzettel 2.jpg bemerkung 2

Meine Frage hierzu:

Wie kann ich das am einfachsten in HTML mit Javascript und/oder DHTML realisieren?

mfg Michael

  1. Tag Michael,
    Normalerweise kann man mit JavaScript nicht direkt txt-Dateien auslesen. Mit einem neuen Browser kann man das XMLRequest-Objekt benutzen, um Text-Dateien auszulesen, dann könntest du den zurückgelieferten Quellcode mit "split" und ähnlichem zerlegen....

    Aber einfacher ist imo folgender Weg: Wandele Deine textdatei in eine gültige JavaScript-Datei um - wenn Du die dann in deinen HTML-Code einbindest, hast Du gleich bequeme JavaScript-Datenstrukturen, auf die Du zugreifen kannst.

    Es gibt z.B. die JSON-Notation für den Austausch von Datensturkturen, die von JavaScript einfach geparsed werden kann.
    Auf der Seite gibt es auch entsprechende Bibliotheken für PHP/ASP/PERL/JAVA uvm., mit denen Du serverseitig ganz einfach eine entsprechende Javascript-Datei aus deinen Daten erzeugen kannst.

    Viele Grüße,
    Jörg

  2. Hi,

    Am einfachsten löst man sowas natürlich, wie schon vom Kollegen Peschke vorgeschlagen mit XMLHttpRequest(), das beim IE allerdings aktiviertes ActiveX erfordert. Ein etwas umständlicherer Weg (der aber auch lokal, also ohne Webserver funktionieren würde!) im Folgendem.

    Mein Quelltext sieht in Auszügen so aus:

    artikel[0]='10000 Papier Pergament 1.jpg bemerkung 1';
    artikel[1]='10001 Papier Notizzettel 2.jpg bemerkung 2';

    Das kann man kürzen zu:

    artikel = new Array(
      [10000,"Papier","Pergament","1.jpg","bemerkung 1"],
      [10001,"Papier","Notizzettel","2.jpg","bemerkung 2"]
                       );

    Denn so kann es besser ummodeln.

    Und hier die dazugehörige txt-Datei (in Auszügen):

    artikelnr kategorie beschreibung bild bemerkung
    10000 Papier Pergament 1.jpg bemerkung 1
    10001 Papier Notizzettel 2.jpg bemerkung 2

    Dier erste Zeile wird komplett getauscht:
    sed -e 's/artikelnr kategorie beschreibung bild bemerkung/artikel = new Array(/'

    Bei den Datenzeilen halt ersetzen:
    perl -pe 's/^(.)/[[$1/;s/\t/],[/g;s/(.)$/$1]],\n/;'

    Und dann am Ende noch mit '[0,"","","",""]);' abschließen (spart die Fummelei das letzte Komma zu entfernen, aber vielleicht weiß ja ein Perlspezi, wie sowas geht?).

    Wie kann ich das am einfachsten in HTML mit Javascript und/oder DHTML realisieren?

    Mit einem iframe z.B. Ob das jetzt das _einfachste_ ist, weiß ich natürlich nicht.
    Im iframe steht dann obiges Array drin und ein paar Zeilen Code, den Kontakt zum parent herzustellen.

    Es hängt also alles davon ab, ob Du die Textdateien bearbeiten kannst oder nehmen mußt, was kommt. (Und ein wenig auch danvon, ob Du den benutzten Webbrowser bestimmen kannst)

    so short

    Christoph Zurnieden

    1. Hallo!

      Vielen Dank für die schnelle Antwort!

      Leider verstehe ich aber noch nicht, wie ich das konkret umsetzen kann. Ich bin leider (noch) nicht so "fit" auf diesem Gebiet.

      Könnten Sie mir deshalb einen kurzen Beispielcode nennen?

      mfg Michael

      1. Hi,

        Könnten Sie mir deshalb einen kurzen Beispielcode nennen?

        Für was genau?
        XMLHttpRequest oder iframe-Methode?

        Die Indizien mehren sich aber stark, das die Frage:"Was ist denn das eigentliche Problem/die Aufgabe?" passender wäre.

        so short

        Christoph Zurnieden

        1. Hallo!

          Es soll eine Artikeldatendank (tabulatorgetrennte txt-Datei) in einen Webshop übernommen werden. Der Artikelstamm befindet sich im Moment noch direkt im Quellcode des Shops, soll aber zur leichteren Wartung ausgelagert werden und beispielsweise in Excel gepflegt werden.

          Das "Auslesen" der Textdatei und das anschließende Anzeigen in tabellarischer Form im Browser habe ich schon realisieren können, nur fehlt mir noch die "Verknüpfung", die Daten nicht anzuzuzeigen, sondern stattdessen in das Array meines Quelltextes einzulesen (Auszüge siehe erstes Posting) um somit die Artikel direkt in der txt-Datei bearbeitet zu können und damit der HTML-Quelltext in Zukunft unberührt bleibt.

          Deshalb die Frage, wie ich hier eine Verbindung herstellen kann.

          mfg Michael

          1. Hi,

            Das "Auslesen" der Textdatei und das anschließende Anzeigen in tabellarischer Form im Browser habe ich schon realisieren können, nur fehlt mir noch die "Verknüpfung", die Daten nicht anzuzuzeigen, sondern stattdessen in das Array meines Quelltextes einzulesen (Auszüge siehe erstes Posting) um somit die Artikel direkt in der txt-Datei bearbeitet zu können und damit der HTML-Quelltext in Zukunft unberührt bleibt.

            Also wandelst Du den txt mittels Programmiersprache (PHP,Perl, ...) um in HTML?!
            Dann kannst Du doch auch die Daten in JavaScript umwandeln?!

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hallo!

              Ich "wandle" hier nichts um, ich lese die txt-Datei lediglich aus und lasse sie dann im Browser über ein ActiveX-Control darstellen!

              Details: http://netmirror.org/mirror/selfhtml/dhtml/modelle/datenanbindung.htm#tabelle

              Nur möchte ich - wie oben bereits erwähnt - nicht, dass die Daten im Browserfenster ausgegeben werden, sondern dass sie direkt in einer JS-Datei in einem bestimmten Format (siehe erstes Posting) "eingelesen" werden. Die JS-Datei ist wiederum in meinem HTML-Quelltext verankert!

              mfg Michael

              1. Hi,

                Ich "wandle" hier nichts um, ich lese die txt-Datei lediglich aus und lasse sie dann im Browser über ein ActiveX-Control darstellen!

                Ein Web-Shop mit ActiveX aber ohne CGI? Ist nicht dein Ernst? Au Backe! =;-> Klingt aber eher nach Intranet-Shop. Ist das gewollt, ein Großteil der potentiellen Kunden (Tendenz steigend) auszuschließen?

                Aber egal, ist ja dein Shop. :-)

                Nur möchte ich - wie oben bereits erwähnt - nicht, dass die Daten im Browserfenster ausgegeben werden, sondern dass sie direkt in einer JS-Datei in einem bestimmten Format (siehe erstes Posting) "eingelesen" werden. Die JS-Datei ist wiederum in meinem HTML-Quelltext verankert!

                Dann les die Daten anschließend halt aus der Tabelle mit JScript aus (innerText).

                Direkter wäre es allerdings, gleich VB-Script zu nehmen und damit die TXT-Datei einzulesen/zu verarbeiten. Das sollte praktisch mit allen Browsern gehen, die a) obiges ActiveX prinzipiell können und es gleichzeitig b) nicht aus hinlänglich bekannten Sicherheitsgründen deaktiviert haben. ;-)

                Ich würde aber prinzipiell zu einer Änderung deiner Vorgehensweise raten. Hinweise zueiner wenigstens etwas besseren Vorgehensweise gab es ja im Thread schon ...

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
          2. Hi,

            Es soll eine Artikeldatendank (tabulatorgetrennte txt-Datei) in einen Webshop übernommen werden.

            Da hätte ich doch mal ein Frage: dieser Webshop soll in's Internet? Oder soll das Dingen als eine Art Infostand im Laden stehen (nur mit dem Intranet verbunden, wenn überhaupt)?

            Der Artikelstamm befindet sich im Moment noch direkt im Quellcode des Shops, soll aber zur leichteren Wartung ausgelagert werden und beispielsweise in Excel gepflegt werden.

            Nunja, "leichtere Wartung" und "in Excel pflegen" in einem Satz ... ;-)
            Aber mir egal, jeder nach seiner Fasson.

            Das Du die "Hartverdrahtung" der Artikelliste lösen möchtest ist ja schonmal sehr sinnvoll wenn diese Liste sich häufiger als zwei-, dreimal im Jahr ändert.

            Das "Auslesen" der Textdatei und das anschließende Anzeigen in tabellarischer Form im Browser habe ich schon realisieren können,

            Aber auch nur exklusiv als ActiveX-Control, ja? Wenn das tatsächlich im Internet laufen soll hast Du damit rein gar keine Chance, da wäre Dein Kundenstamm extrem klein.

            nur fehlt mir noch die "Verknüpfung", die Daten nicht anzuzuzeigen, sondern stattdessen in das Array meines Quelltextes einzulesen (Auszüge siehe erstes Posting) um somit die Artikel direkt in der txt-Datei bearbeitet zu können und damit der HTML-Quelltext in Zukunft unberührt bleibt.

            Na, das setzt dann zumindest "nur noch" Javascript voraus.
            Aber auch hier: mir egal, ist nicht mein Geld.

            Es bleibt also mehr oder weniger nur noch die Lösung mit einem iframe übrig. Vorgehen wie beschrieben.

            so short

            Christoph Zurnieden

            1. Hallo,

              Es soll eine Artikeldatendank (tabulatorgetrennte txt-Datei) in einen Webshop übernommen werden.

              Da hätte ich doch mal ein Frage: dieser Webshop soll in's Internet? Oder soll das Dingen als eine Art Infostand im Laden stehen (nur mit dem Intranet verbunden, wenn überhaupt)?

              Es handelt sich hier um einen Webshop, der nur in einem Intranet laufen soll.

              Der Artikelstamm befindet sich im Moment noch direkt im Quellcode des Shops, soll aber zur leichteren Wartung ausgelagert werden und beispielsweise in Excel gepflegt werden.

              Nunja, "leichtere Wartung" und "in Excel pflegen" in einem Satz ... ;-)
              Aber mir egal, jeder nach seiner Fasson.

              Ist eine Vorgabe von meinem Vorgesetzten. Kann daran leider nichts ändern.

              Das Du die "Hartverdrahtung" der Artikelliste lösen möchtest ist ja schonmal sehr sinnvoll wenn diese Liste sich häufiger als zwei-, dreimal im Jahr ändert.

              Das "Auslesen" der Textdatei und das anschließende Anzeigen in tabellarischer Form im Browser habe ich schon realisieren können,

              Aber auch nur exklusiv als ActiveX-Control, ja? Wenn das tatsächlich im Internet laufen soll hast Du damit rein gar keine Chance, da wäre Dein Kundenstamm extrem klein.

              siehe oben

              nur fehlt mir noch die "Verknüpfung", die Daten nicht anzuzuzeigen, sondern stattdessen in das Array meines Quelltextes einzulesen (Auszüge siehe erstes Posting) um somit die Artikel direkt in der txt-Datei bearbeitet zu können und damit der HTML-Quelltext in Zukunft unberührt bleibt.

              Na, das setzt dann zumindest "nur noch" Javascript voraus.
              Aber auch hier: mir egal, ist nicht mein Geld.

              Es bleibt also mehr oder weniger nur noch die Lösung mit einem iframe übrig. Vorgehen wie beschrieben.

              Werde mich dann daran mal versuchen. Einstweilen Danke für die Hilfe!

              so short

              Christoph Zurnieden

              mfg Michael

              1. Hi,

                Es handelt sich hier um einen Webshop, der nur in einem Intranet laufen soll.

                FAQ 7d

                Es bleibt also mehr oder weniger nur noch die Lösung mit einem iframe übrig. Vorgehen wie beschrieben.
                Werde mich dann daran mal versuchen.

                In dem Fall ist es wohl am einfachsten, die bereits integrierten Werte mit innerText aus der Tabelle auszulesen.

                Gruß, Cybaer

                --
                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. Hallo,

      Am einfachsten löst man sowas natürlich, wie schon vom Kollegen Peschke vorgeschlagen mit XMLHttpRequest(), das beim IE allerdings aktiviertes ActiveX erfordert.

      Übrigens: http://slashdot.org/~Quantum Jim/journal/92909 für GET-Requests ohne eigene Header, XML-Dokument als zurückgegebene Ressource und DOM-Zugriff darauf. ActiveX ist dabei nicht nötig.
      Wenn man nur einen Array laden will, ist selbst das zu überdimensioniert, da reicht ein iframe oder das Einfügen/Ändern eines script-Elements – natürlich auch ohne ActiveX.

      Mathias

      1. Hi,

        Übrigens: http://slashdot.org/~Quantum Jim/journal/92909 für GET-Requests ohne eigene Header, XML-Dokument als zurückgegebene Ressource und DOM-Zugriff darauf. ActiveX ist dabei nicht nötig.

        Den hatte ich sogar ausnahmsweise einmal gelesen ;-)
        Bin aber wieder davon ab es vorzuschlagen, da:

        "My original article on Reading Files in Internet Explorer with JScript no longer seems to work with IE 6 SP 2. It seems that the behavior of node.nodeValue changed between revisions of Internet Explorer."

        und

        "I haven't tested that with IE 6 SP 1, since I no longer have access to that version!"

        Da ich hier gar keinen IE habe konnte ich das nicht ausprobieren, der Kantonist war mir so zu unsicher.

        Wenn man nur einen Array laden will, ist selbst das zu überdimensioniert, da reicht ein iframe oder das Einfügen/Ändern eines script-Elements – natürlich auch ohne ActiveX.

        Wenn es nur um die reine Anzeige geht: klar.
        Es scheint sich aber eh erledigt zu haben, da es sich wohl um ein Intranet handelt. Denn wer würde sonst ActiveX eingeschaltet haben? Dann erscheint mir XMLHttpRequest() angemessen, falls mit der CSV -- pardon: TSV noch etwas rumformatiert werden soll.

        Nä, Moment: ...in einen Webshop..."? Also doch in's Internet und es wird ActiveX vorausgesetzt?
        Oh je *sigh*

        so short

        Christoph Zurnieden