3

データ構造がテキスト エディターで頻繁に使用されていることを読みました。しかし、私が見ているように、単純なテキスト エディターを高級言語でプログラミングしている場合、データ構造を使用する必要はありません。

たとえば、Java では、SwingJTextAreagetText()メソッドを使用して、持っている文字列をファイルに保存できます。基本的に、データ構造のない単純なテキスト エディターを使用しています。

編集用のデータ構造自体が実装されていると思いJTextAreaます。これは正しいです?それとも、データ構造がさらに低くなりますか。つまり、OS がデータをキーボードからバッファに受け入れる場所は? それで、データ構造がどのレベルの抽象化で実装されているかを理解するのを手伝ってくれる人がいますか?

4

1 に答える 1

11

テキスト エディターの重要なデータ構造は、テキストを保持するものです。 この記事では、人々がテキスト エディター用に選択する構造の種類をまとめています。記事は古いですが、今日でも非常に関連性があります。

非常に単純なデータ構造 (文字の配列など) は、大量のデータを移動またはコピーすることになるため、すでに非常に長いドキュメントの先頭に文字を挿入するなど、特定の種類の操作には遅すぎる傾向があります。 . ほとんどのデータ構造は、ドキュメントを巧みにチャンクに分割することで、移動するデータの量を削減または制限します。リンクした記事に詳細があります。

より高度なデータ構造を使用するもう 1 つの理由は、取り消しややり直しなどの機能を簡単に実装できるようにするためです。一部のデータ構造では、削除されたテキストを簡単に保持できるため、いくつかのポインターまたはオフセットを変更することで、ドキュメントを以前の状態に簡単に戻すことができます。

追加のデータ構造はテキストの書式設定に役立ちますが、それらは通常、テキスト エディターよりもドキュメント エディター (Word など) 向けです。

JTextArea (および他のプラットフォームの同等の機能) は本質的にテキスト エディターであり、リンク先の記事のデータ構造の 1 つを使用している可能性があります。

既存のものを使用するのではなく、そのレベルでテキスト エディターを作成する場合は、いくつかの種類の機能を実装する必要があります。

  1. ファイルからデータ構造にテキストをロードし、再度保存します。
  2. テキストを変更するキー押下への応答。たとえば、ユーザーが文字キーを入力した場合、その文字をテキスト データ構造の現在の場所に挿入する必要があります。バックスペース キーを押した場合は、文字を削除する必要があります。等。
  3. ドキュメントを画面に表示します。ウィンドウ座標をテキスト シーケンスのあるポイントにマップする必要があり、その逆も同様です。たとえば、ユーザーがマウスをクリックした場合、クリックの (x,y) 座標をテキスト シーケンス内の位置に変換する必要があります。レイアウトがどれほど洗練されているかによって、これをその場で計算できる場合がありますが、多くの場合、テキスト シーケンスとウィンドウ座標の間のマッピングとして機能する追加のデータ構造があると役立ちます。もちろん、テキストが変更された場合やウィンドウのサイズが変更された場合は、そのデータ構造を更新する必要があります。
于 2013-02-25T21:11:06.410 に答える