Spec-Zone.ru › OCaml

Модуль In_channel

module In_channel: sig .. end

Вводные каналы.

Этот модуль предоставляет функции для работы с входными каналами.

См. раздел с примерами ниже.

  • Since 4.14

Каналы

type t = in_channel 

Тип входного канала.

type open_flag = open_flag = 
| Open_rdonly (*

открыт для чтения.

*)
| Open_wronly (*

открыт для записи.

*)
| Open_append (*

открыт для добавления: запись всегда в конце файла.

*)
| Open_creat (*

создать файл, если он не существует.

*)
| Open_trunc (*

очистить файл, если он уже существует.

*)
| Open_excl (*

ошибка при Open_creat, если файл уже существует.

*)
| Open_binary (*

открыт в двоичном режиме (без преобразования).

*)
| Open_text (*

открыт в текстовом режиме (может производить преобразования).

*)
| Open_nonblock (*

открыт в режиме без блокировки.

*)

Режимы открытия для In_channel.open_gen.

val stdin : t

Стандартный ввод для процесса.

val open_bin : string -> t

Открыть именованный файл для чтения и вернуть новый входной канал на этом файле, позиционированный в начале файла.

val open_text : string -> t

То же, что и In_channel.open_bin, но файл открывается в текстовом режиме, так что происходит перевод новой строки во время чтения. В операционных системах, которые не различают текстовый и двоичный режимы, эта функция ведет себя как In_channel.open_bin.

val open_gen : open_flag list -> int -> string -> t

open_gen mode perm filename открывает именованный файл для чтения, как описано выше. Дополнительные аргументы mode и perm указывают режим открытия и разрешения файла. In_channel.open_text и In_channel.open_bin являются частными случаями этой функции.

val with_open_bin : string -> (t -> 'a) -> 'a

with_open_bin fn f открывает канал ic на файле fn и возвращает f
    ic
. После того, как f вернётся, либо со значением, либо вызвав исключение, ic гарантированно будет закрыт.

val with_open_text : string -> (t -> 'a) -> 'a

Как In_channel.with_open_bin, но канал открывается в текстовом режиме (см. In_channel.open_text).

val with_open_gen : open_flag list -> int -> string -> (t -> 'a) -> 'a

Как In_channel.with_open_bin, но можно указать режим открытия и разрешение файла, если файл должен быть создан (см. In_channel.open_gen).

val close : t -> unit

Закрыть заданный канал. Функции ввода генерируют исключение Sys_error при применении к закрытому входному каналу, за исключением In_channel.close, которая ничего не делает при применении к уже закрытому каналу.

val close_noerr : t -> unit

То же, что и In_channel.close, но игнорировать все ошибки.

Ввод

val input_char : t -> char option

Прочитать один символ из заданного входного канала. Возвращает None если больше символов для чтения нет.

val input_byte : t -> int option

То же, что и In_channel.input_char, но вернуть 8-битное целое число, представляющее символ. Возвращает None если достигнут конец файла.

val input_line : t -> string option

input_line ic считывает символы из ic до тех пор, пока не встретится новая строка или конец файла. Возвращает строку всех прочитанных символов без новой строки (если она есть). Возвращает None если достигнут конец файла. В частности, это будет случай, если последняя строка ввода пуста.

Новая строка — это символ \n за исключением того, что файл открыт в текстовом режиме и Sys.win32 это true, в этом случае это последовательность символов \r\n.

val really_input_string : t -> int -> string option

really_input_string ic len считывает len символов из канала ic и возвращает их в новой строке. Возвращает None если конец файла достигнут до того, как прочитано len символов.

Если один и тот же канал считывается одновременно несколькими потоками, возвращаемая строка не гарантирует, что она содержит непрерывные символы из ввода.

val input_all : t -> string

input_all ic считывает все оставшиеся данные из ic.

Если один и тот же канал считывается одновременно несколькими потоками, возвращаемая строка не гарантирует, что она содержит непрерывные символы из ввода.

val input_lines : t -> string list

input_lines ic считывает строки, используя In_channel.input_line, пока не достигнет конца файла. Он возвращает список всех прочитанных строк в порядке их чтения. Символы новой строки, завершающие строки, не включаются в возвращаемые строки. Пустые строки дают пустые строки.

  • Since 5.1

Расширенный ввод

val input : t -> bytes -> int -> int -> int

input ic buf pos len считывает до len символов из заданного канала ic, сохраняя их в последовательности байтов buf, начиная с символа с номером pos. Он возвращает фактическое количество прочитанных символов, от 0 до len (включительно). Значение 0 означает, что достигнут конец файла.

Используйте In_channel.really_input для чтения ровно len символов.

  • Raises Invalid_argument если pos и len не обозначают допустимого диапазона buf.
val input_bigarray : t ->       ('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout)       Bigarray.Array1.t -> int -> int -> int

То же, что и In_channel.input, но данные читаются в массив bigarray.

  • Since 5.2
val really_input : t -> bytes -> int -> int -> unit option

really_input ic buf pos len считывает len символов из канала ic, сохраняя их в последовательности байтов buf, начиная с символа номер pos.

Возвращает None если конец файла достигнут до того, как было прочитано len символов.

Если один и тот же канал считывается одновременно несколькими потоками, байты, считанные really_input не гарантируется, что будут непрерывными.

  • Возможные исключения Invalid_argument если pos и len не обозначают допустимый диапазон buf.
val really_input_bigarray : t ->       ('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout)       Bigarray.Array1.t -> int -> int -> unit option

То же, что и In_channel.really_input, но считывает данные в массив bigarray.

  • С версии 5.2
val fold_lines : ('acc -> string -> 'acc) -> 'acc -> t -> 'acc

fold_lines f init ic считывает строки из ic используя In_channel.input_line до тех пор, пока не будет достигнут конец файла, и последовательно передаёт каждую строку функции f в стиле fold. Более точно, если считываются строки l1, ..., lN то fold_lines f init ic вычисляет f (... (f (f init l1) l2) ...) lN. Если f не имеет побочных эффектов, это эквивалентно List.fold_left f init (In_channel.input_lines ic), но более эффективно, поскольку оно не создаёт список всех прочитанных строк.

  • С версии 5.1

Переход к позиции

val seek : t -> int64 -> unit

seek chan pos устанавливает текущую позицию чтения на pos для канала chan . Это работает только для обычных файлов. В файлах других типов поведение не определено.

val pos : t -> int64

Возвращает текущую позицию чтения для данного канала. Для файлов, открытых в текстовом режиме в Windows, возвращаемая позиция является приблизительной (из-за преобразования конца строки); в частности, сохранение текущей позиции с помощью In_channel.pos, а затем возврат к этой позиции с помощью In_channel.seek не сработает. Для того, чтобы этот фрагмент кода работал надёжно и переносимо, файл должен быть открыт в двоичном режиме.

Атрибуты

val length : t -> int64

Возвращает размер (количество символов) обычного файла, на котором открыт данный канал. Если канал открыт на файле, который не является обычным файлом, результат бессмысленный. Возвращаемый размер не учитывает преобразования конца строки, которые могут выполняться при чтении из канала, открытого в текстовом режиме.

val set_binary_mode : t -> bool -> unit

set_binary_mode ic true устанавливает канал ic в двоичный режим: никакие преобразования не происходят во время ввода.

set_binary_mode ic false устанавливает канал ic в текстовый режим: в зависимости от операционной системы, некоторые преобразования могут происходить во время ввода. Например, в Windows концы строк будут преобразованы из \r\n в \n.

Эта функция не имеет эффекта в операционных системах, которые не различают текстовый и двоичный режимы.

val is_binary_mode : t -> bool

is_binary_mode ic возвращает, находится ли канал ic в двоичном режиме (см. In_channel.set_binary_mode).

  • С версии 5.2
val isatty : t -> bool

isatty ic равно true если ic относится к терминалу или окну консоли, false в противном случае.

  • С версии 5.1

Примеры

Чтение содержимого файла:

      let read_file file = In_channel.with_open_bin file In_channel.input_all
    

Чтение строки из stdin:

      let user_input () = In_channel.input_line In_channel.stdin
    

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/In_channel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API