javascriptまたはjqueryを使用して巨大なテキストファイルを1行ずつ読み取るにはどうすればよいですか? 多くのメモリが必要になるため、すべてを読み取って配列に分割することはできません。ストリーミングしたいだけ...
編集メモとして、私はGoogle Chrome拡張機能に取り組んでいるため、fso ActiveXを使用したソリューションはこのブラウザーでは機能しません。他のアイデアはありますか?
javascriptまたはjqueryを使用して巨大なテキストファイルを1行ずつ読み取るにはどうすればよいですか? 多くのメモリが必要になるため、すべてを読み取って配列に分割することはできません。ストリーミングしたいだけ...
編集メモとして、私はGoogle Chrome拡張機能に取り組んでいるため、fso ActiveXを使用したソリューションはこのブラウザーでは機能しません。他のアイデアはありますか?
HTML5は、File API仕様を介して、ローカルファイルと対話するための標準的な方法を最終的に提供します。その機能の例として、File APIを使用して、サーバーに送信される画像のサムネイルプレビューを作成したり、ユーザーがオフラインのときにアプリがファイル参照を保存できるようにしたりできます。さらに、クライアント側のロジックを使用して、アップロードのmimetypeがファイル拡張子と一致することを確認したり、アップロードのサイズを制限したりできます。
この仕様は、「ローカル」ファイルシステムからファイルにアクセスするためのいくつかのインターフェースを提供します。1.File-個々のファイル。名前、ファイルサイズ、mimetype、ファイルハンドルへの参照などの読み取り専用情報を提供します。2.FileList-ファイルオブジェクトの配列のようなシーケンス。(デスクトップからファイルのディレクトリを考えるかドラッグします)。3.Blob-ファイルをバイト範囲にスライスできます。
上記のデータ構造と組み合わせて使用すると、FileReaderインターフェイスを使用して、使い慣れたJavaScriptイベント処理を通じてファイルを非同期的に読み取ることができます。したがって、読み取りの進行状況を監視し、エラーをキャッチし、ロードがいつ完了したかを判断することができます。多くの点で、APIはXMLHttpRequestのイベントモデルに似ています。
注:このチュートリアルの執筆時点では、ローカルファイルを操作するために必要なAPIはChrome6.0およびFirefox3.6でサポートされています。Firefox 3.6.3以降、File.slice()メソッドはサポートされていません。
Lazy Text View ウィジェットは、Web ページにテキストを表示するためのものです。重要な機能は、ブラウザのメモリにテキスト全体をロードするのではなく、ファイルのフラグメント (フレーム) のみを表示することです。これにより、大きな、非常に大きな、巨大なテキストを表示できます。
このウィジェットは、テキスト表示用のユーザー インターフェイスを提供し、サーバー側のデータ ソースを必要とします。サーバー側のコンポーネントを自分で実装する必要があります。そのロジックは非常に単純です。ウィジェットがテキストの次のチャンクを必要とする場合、次のチャンクを (POST メソッドを使用して) サーバーに照会します。
TextStreamとScripting.FileSystemObject
; object = ObjectOpen("Scripting.FileSystemObject") ; WIL syntax
; ObjectClose(object) ; WIL syntax
;
; TextStream = object.CreateTextFile(filename[, overwrite[, unicode]]) ; Creates a file as a TextStream
; TextStream = object.OpenTextFile(filename[, iomode[, create[, format]]]) ; Opens a file as a TextStream
;
; TextStream.Close ; Close a text stream.
;
; TextStream.ReadAll ; Read the entire stream into a string.
; TextStream.ReadLine ; Read an entire line into a string.
; TextStream.Read (n) ; Read a specific number of characters into a string.
;
; TextStream.Write (string) ; Write a string to the stream.
; TextStream.WriteLine ; Write an end of line to the stream.
; TextStream.WriteLine (string) ; Write a string and an end of line to the stream.
; TextStream.WriteBlankLines (n) ; Write a number of blank lines to the stream.
;
; TextStream.SkipLine ; Skip a line.
; TextStream.Skip (n) ; Skip a specific number of characters.
;
; TextStream.Line ; Current line number.
; TextStream.Column ; Current column number.
;
; TextStream.AtEndOfLine ; Boolean Value. Is the current position at the end of a line?
; TextStream.AtEndOfStream ; Boolean Value. Is the current position at the end of the stream?
; -------------------------------------------------------------------------------------------------------------------------------
サンプルコード:
function ReadFiles()
{
var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// Write a line.
Response.Write("Writing file <br>");
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
f1.Close();
// Read the contents of the file.
Response.Write("Reading file <br>");
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
s = ts.ReadLine();
Response.Write("File contents = '" + s + "'");
ts.Close();
}
fs.read(fd, buffer, offset, length, position, [callback])
fd で指定されたファイルからデータを読み取ります。
buffer は、データが書き込まれるバッファです。
offset は、書き込みが開始されるバッファー内のオフセットです。
length は、読み取るバイト数を指定する整数です。
position は、ファイル内のどこから読み取りを開始するかを指定する整数です。position が null の場合、データは現在のファイル位置から読み取られます。