2012-04-02 8 views
2

Gibt es eine Möglichkeit, eine Datei Zeile für Zeile in Javascript zu lesen, speziell diese file, die ein Wörterbuch ist. Ich habe versucht, eine Replik eines Java-Anagramm-Solvers zu erstellen, die ich vor ein paar Monaten gemacht habe, aber ich habe das Problem, eine Datei Zeile für Zeile nicht lesen zu können, getroffen. Ich könnte die Datei herunterladen und lokal speichern, wenn das für die Lesbarkeit von Bedeutung wäre.Können Sie Zeile für Zeile in Javascript lesen?

+0

Sie können beliebige Daten aus Ihrer eigenen Domäne mit AJAX laden. Sie würden eine XML HTTP-Anfrage verwenden. – zzzzBov

+0

Oh und Wenn es nicht Ihre Domäne ist, dann können Sie es nicht tun (es sei denn, Ihr Browser ist fehlerhaft). Dies würde die Ursprungsregeln für Querverweise brechen. –

+0

Da Javascript im Browser keinen Zugriff auf ein Dateisystem und die nur andere Option ist, über das Netzwerk zu gehen, möchten Sie wirklich in einzelnen Anfragen hin und her zum Server gehen, um die Datei nach und nach zu lesen? Vielleicht ist dies einfach nicht die richtige Umgebung, um dieses Problem zu lösen. – deceze

Antwort

3

Verwendung YQL:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fcollections%2Finterfaces%2Fexamples%2Fdictionary.txt%22&format=json&diagnostics=true&callback=cbfunc 

Here's what the fiddle looks like:

window.callback = function(a) { window.file = a.query.results.body.p; go(); }; 

$.getScript('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Ftutorial%2Fcollections%2Finterfaces%2Fexamples%2Fdictionary.txt%22&format=json&diagnostics=true&callback=callback'); 

window.go = function() { 
    var terms = file.split(' '); 

    for (var i = 0; i < 100; i++) 
     console.log(terms[i]) 
}; 

Die Geige nur, dass die ersten 100, aber Sie bekommen die Idee (hoffe ich).

+0

Das sieht gut aus, ich habe noch nie YQL benutzt, also werde ich es versuchen. Danke für das Codebeispiel :) – JasonMortonNZ

1

In den meisten Fällen können Sie die Datei einfach in den Speicher lesen und dann in Zeilen parsen. Wenn Sie das Ganze mit einem Ajax-Aufruf in den Speicher schreiben, könnten Sie einfach data.split("\n") verwenden, um es in ein Array von Zeilen umzuwandeln.

+0

Wenn ich dies auf einer Datei mit 100k + Zeilen, wäre es immer noch in Ordnung? – JasonMortonNZ

+0

Wenn jede Zeile 100 Byte lang wäre, wären das 10 MB RAM für die Datei. Auf einem Desktop-Computer ist das in Ordnung - einige Bilder sind so groß. Auf einem Telefon ist es wahrscheinlich keine gute Idee, obwohl vielleicht immer noch OK. – jfriend00

0

Sie sollten Ajax Request für einen solchen Vorgang einleiten. Das Lesen einer Datei Zeile für Zeile, wird jedoch nicht über Ajax empfohlen, da Sie am Ende eine Menge Serveranforderungen erstellen werden, da es bei JavaScript nur um Client-Seite und eingeschränkten Zugriff geht. Ajax-Anfrage an den Server ist in den letzten Jahren hinzugefügt worden.

Definitiv suchen Sie einige Informationen mit einigen Schlüsselwörtern; Es wäre also sinnvoll, wenn Sie die Suchlogik den Serverfunktionen hinzufügen. Rufen Sie die spezifische Funktion über Ajax auf und geben Sie das Ergebnis an den Browser zurück. Diese Funktion könnte eine Datei sein, die ein Ergebnis oder einen Web-Service erzeugt. Sie wählen Ihren Geschmack.

Alternative Option wäre, die Dateiinformationen zu JSON (about JSON) beim Start neu zu codieren und es auf Client-js-Skript zu rollen. Ich würde XML dafür nicht empfehlen, da es in den Verarbeitungsterminen viel Browserspeicher verbrauchen wird. War dort! :(. Da JavaScript native Unterstützung für JSON hat, wird es reibungslos funktionieren. Warnung dies macht Daten zu lokalen.

+0

Ich denke, dass Javascript nicht die richtige Wahl für die bestimmte Anwendung ist, die ich baue. Ich habe keine Erfahrung mit JSON, werde aber bald darauf schauen, ob ich etwas Freizeit finden kann (was mir selten passiert). Danke für Ihre Kommentare. – JasonMortonNZ

Verwandte Themen