SMLベーシスライブラリを使用して、特定の位置でファイルを開く方法はありますか?つまり、ファイルをスキャンしてデータを破棄するのではなく、オペレーティングシステムコールを使用して位置を変更します。SMLベーシスを求めるファイル
5
A
答えて
7
これは扱いにくいです。残念ながら、シークは直接サポートされていません。さらに、ファイルの位置は、バイナリファイル、すなわちBinIO
構造[1]で開かれたものに対してのみ透過的です。この構造の場合、対応するタイプBinIO.StreamIO.pos
は、整数タイプのPosition.int
と定義されています。それはように使用
(* seekIn : BinIO.instream * Position.int -> unit *)
fun seekIn(instream, pos) =
case BinIO.StreamIO.getReader(BinIO.getInstream instream) of
(reader as BinPrimIO.RD{setPos = SOME f, ...}, _) =>
(f pos;
BinIO.setInstream(instream,
BinIO.StreamIO.mkInstream(reader, Word8Vector.fromList[]))
)
| (BinPrimIO.RD{name, ...}, _) =>
raise IO.Io{
name = name,
function = "seekIn",
cause = IO.RandomAccessNotSupported
}
:
しかし、標準から完全なI/OスタックをサポートしているSMLシステムでは、あなたは下のI/Oレイヤを使用して関数を求め、以下の合成することができるはずです。
val file = BinIO.openIn "filename"
val _ = seekIn(file, 200)
val bin = BinIO.inputN(file, 1000)
あなたはWord8Vectorから文字列に変換する必要がある場合
:val s = Byte.bytesToString bin
同様にアウトストリームに対しても同様の処理を行うことができます。
4
あなたがreader/writerのホールドを取得するために管理することができれば、彼らはあなたが扱っているリーダ/ライタの種類に応じて、getPos
、setPos
とendPos
機能を持っている必要があります。
関連する問題
- 1. Vimは.smlファイルのためにshiftwidthを変更します
- 2. ファイル名とリストを取るSML関数
- 3. SML -
- 4. SML/NJ:
- 5. ダミータイプSML
- 6. ファイルをSMLの配列に格納する方法。
- 7. SMLバイナリツリーリダクション機能
- 8. ファクトリ・ストリームSML
- 9. SMLプログラミングのヘルプタプル
- 10. シンプルなSMLコードエラー
- 11. SML:ブール関数
- 12. SML構文エラーヘルプ
- 13. SML構文エラー
- 14. SML機能が
- 15. SML [circularity]エラー
- 16. SMLコンパイラのソースコード?
- 17. ファイルをダウンロードし、アンドロイドでstorgeの許可を求める
- 18. コマンドプロンプトのSML/NJエラー
- 19. SML - コード内のエラー
- 20. SMLマッチ冗長エラー
- 21. smlでレイジーなサスペンド
- 22. レコードリストのSML関数
- 23. SML関数とタプル
- 24. SMLプログラムでPythonファイルを呼び出しますか?
- 25. run-smlがemacs sml-modeで動作しない
- 26. Python:CSVファイルの要求を掻き集める
- 27. NodeJS SOAP要求にファイルを含めるには
- 28. DOSからのsvnクライアントパスワードを求めるBATファイル
- 29. log4j.dtdを求めるLog4j.dtd
- 30. SML:抽象データ型を作成する
ニースの回答!しかし、私はちょうど不思議だった...ファイルを本質的にランダムに読んで(比較的長距離を探して小さなチャンクを読む)、IOスタック全体(命令/ストリーム/プリミティブIO)を実際に前後に移動しているそれとも、単に 'BinPrimIO.reader'を直接使う方が良いでしょうか? – pyon
@EduardoLeón、私は低レベルのインターフェイスを直接使用する際に特に利点はありません。高レベルのものは、より便利で効率的です(バッファリングとすべて)。 –