• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Brauche Hilfe beim Parsen eines Textes zu einer Tabelle

WCEnte

New member
Hallo,
ich habe auf meiner Website eine Dokumentationen über Codes (die von einem PPC-Codehandler auf der Wii U ausgefürht werden), die in Tabellen gelistet sind.
Allerdings habe ich keine Lust mehr, immer diese Tabellen zu schreiben. Also habe ich mich gestern näher mit JavaScript befasst und es geschafft, dynamisch Tabellen "erstellen" zu lassen.
Hier der bisherige Code:
Code:
// Wii U cheat code table parser

var topics = [];            // Array für Header
topics[0] = "Title";
topics[1] = "Author";
topics[2] = "Cafe Code";
topics[3] = "Note";
topics[4] = "Demo";


var table = '';             // Tabellen body string
var tablehead = '';         // t-head string
var rows = 2;               // (Testwert)
var cols = topics.length;   // Spaltenanzahl ergibt sich aus der Länge des Arrays

// table head

     tablehead += '<tr>';
    for (var h = 0; h < topics.length; h++)
        {
            tablehead += '<th>' + topics[(h)] + '</th>';
        }
    tablehead += '</tr>';




// table body
for (var r = 0; r < rows; r++)
{
    table += '<tr>';
    for (var c = 1; c <= cols; c++)
        {
            table += '<td>' + "_" + '</td>';
        }
    table += '</tr>';
}
document.write('<table border="2">' + '<thead>' + tablehead + '</thead>' + '<tbody>'+ table + '</tbody>' + '</table>');

Nur weiß ich nicht, wie ich eine im html/php-Dokument eingebundene Datei mit JavaScript lesen kann.
Das Javascript soll dabei nach besonderen Symbolen suchen und die entsprechende Zeile in die nte <td></td> kopieren, wobei das besondere Zeichen ausgeschnitten wird.

Das sollte in etwa so funktionieren:
Die Zeile, die mit dem $-Zeichen beginnt kommt in die erste td. Die Zeile, die mit dem §-Zeichen beginnt, in die Zweite. Dann folgt der Hex-Code, der in die dritte td kommt. Dann kommt die Zeile, die mit * beginnt in die vierte td. Ein Bild- oder Video-URL, mit ~ markiert in die fünfte td.
Hier ein Beispiel:
Code:
$Run very fast
§CosmoCortney
09020000 102F48A8
00040000 00000000
30000000 10976AB4
48700000 48800000
00126A14 43000000
D0000000 DEADCAFE
*button-press the left stick
~videoUrl

Könnte mir da jemand weiterhelfen?
Am besten zu erst nur, wie ich auf eine für JavaScript geeignete Weise die datei im html-Dokument lade und eine Zeile nach einem Symbol prüfe.

Danke
 
Zuletzt bearbeitet von einem Moderator:
ich habe auf meiner Website eine Dokumentationen über Codes (die von einem PPC-Codehandler auf der Wii U ausgefürht werden), die in Tabellen gelistet sind.
Allerdings habe ich keine Lust mehr, immer diese Tabellen zu schreiben.
Wie hast du diese denn bis jetzt geschrieben? Was meinst du mit geschrieben?


Nur weiß ich nicht, wie ich eine im html/php-Dokument eingebundene Datei mit JavaScript lesen kann.
Wie/wo/wann und von wem wird das eingebunden?
 
Dann mach' die doch in einem Format, mit dem man in JS gut weiterarbeiten kann. JSON würde sich anbieten. Dein Beispiel oben würde dann so aussehen:
Code:
[
{
	"Title": "Run very fast",
	"Author": "CosmoCortney",
	"CafeCode": "09020000 102F48A8\n00040000 00000000\n30000000 10976AB4\n48700000 48800000\n00126A14 43000000\nD0000000 DEADCAFE",
	"Note": "button-press the left stick",
	"Demo": "videoUrl"
},
{ ... nächster Eintrag ...}
Diese Datei kannst du dir dann mit AJAX holen und per JSON.parse() direkt in ein JS-Array/Objekt umwandeln.
 
@kkapsner also werden alle Inhalte dann in diesem Format geschrieben? Das wäre nicht weniger mühsam, als die Tabellen manuell zu schreiben.

___

Ich habe den Dateinamen der .txt mit JavaScript in eine Variable laden können.

HTML:
    <script type="text/javascript">
        var cheatfile = "test.txt";
        tabellenkrams();
    </script>

JavaScript (am ende der tabellenkrams() Funktion):
Code:
(...)
var cheats = new XMLHttpRequest();
cheats.open('GET', cheatfile);
cheats.onreadystatechange = function(data)
{
document.write(cheats.responseText);
}
//cheats.send();
document.write(cheats.responseText);

In der Console bekomme ich nur "undefined". Aber klicke ich dort den Link an, öffnet sich die .txt Datei.
Eine Fehlermeldung gibt es nicht.
 
Das einfachste wäre es schon das in diesem Format zu speichern. Zumindest aus Sicht von JavaScript so wie du es jetzt planst.

Wo und warum du in der Console ein undefined bekommst könnte an dem document.write() liegen, was du aber schleunigst wieder vergessen solltest.

Was hast du denn auf deinem Server noch zu Verfügung (PHP, MySql...)?
 
also werden alle Inhalte dann in diesem Format geschrieben? Das wäre nicht weniger mühsam, als die Tabellen manuell zu schreiben.
Ja, es würde alles in diesem Format geschrieben werden - ich finde aber, dass das nicht viel mehr Aufwand ist, als das von dir vorgeschlagene Format. Und es ist extrem viel lesbarer (auch als die Tabelle).

Für deinen Fall ist document.write() komplett ungeeignet, da du ja auf das onreadystatechange-Event warten musst und da dann dein Dokument schon geschlossen ist.

In dem onreadystatechange musst du übrigens noch auf den state auch prüfen - erst bei state 4 sind die Daten auch wirklich da und können gelesen werden.

... und warum hast du das .send() auskommentiert? Wenn du die Anfrage nicht sendest, kannst du auch nichts empfangen.

Zu document.write:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open( ) had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
Mir geht es ja darum, die .txt Dateien schnell schreiben zu können und dass die mittels JavaScript in eine Tabelle geparst werden. Es macht nicht gerade viel Spaß manuell Tabellen von fast 1000 Reihen zu schreiben wie hier.
Im JSON-Format wäre es immernoch viel Arbeit.
Deswegen ist es am angenehmsten, haben die entsprechenden Zeilen einfach nur ein Symbol, damit der Parser diese entsprechend behandelt. Bei diesem Formate der Textdatei kann ich all diese Zeichen mit jedem beliebigen Editor mit Suchen & Ersetzen entfernen und so auch zum Download anbieten.

Für mich als Java-Anfängerin eignet sich document.write als einfache, effective Lösung die String-Variablen entsprechend im Dokument zu schreiben.
Also sollte ich an Stelle des onreadystatechange etwas anderes nehmen?

Daher würde ich gerne zuerst herausfinden, wie ich die im php/html-Dokument definierte Textdatei mittels eines JavaScripts in einer .js Datei laden und anzeigen kann.

.send(); habe ich nur testweise auskommentiert. Nutze ich es bekomme ich folgende Fehlermeldung:
XMLHttpRequest cannot load file:///D:/Dokumente/htdocs/test/test.txt. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
(Clicken auf den Link öffnet aber die Datei).


Und ja, mir steht noch php zur Verfügung.

Edit:

Habe es geschafft, die Datei mit PHP in eine Variable zu laden und diese mit Javascript auszugeben.
Das Problem ist, dass die Zeilenumbrüche weg sind.
Nutze ich <pre> stattdessen, sind sie da, aber dann kann ich den Inhalt nicht in eine Variable laden
 
Zuletzt bearbeitet:
Die Zeilenumbrüche sind nicht weg, sondern entsprechen nicht dem HTML-Zeilenumbruch <br />

Hab ich auch gemerkt. Die Zeichen von 0x0A sind noch alle da.

Habs geschafft. Habe jede Zeile in ein Array gepackt.
Kann auch nun prüfen, ob eine Zeile mit einem bestimmten Zeichen beginnt.
Wenn ich nun eine Zeile mit diesem bestimmten Zeichen ohne dieses ausgeben will, wie entferne ich dieses?
Besser gesagt, wie entferne ich das erste Zeichen/Byte eines Strings?


Habs nun selber gschafft, alles zu parsen. Nur weiß ich nicht, wie ich die Zeichen wegbekomme..


http://forum.jswelt.de/images/attach/png.gif


Hab das auch hinbekommen mit .substr(1);...
 

Anhänge

  • parsing.png
    parsing.png
    56 KB · Aufrufe: 3
Zuletzt bearbeitet:
Zurück
Oben