F # - Базовый ввод / вывод

Базовый ввод-вывод включает -

  • Чтение и запись в консоль.
  • Чтение и запись в файл.

Модуль Core.Printf

Мы использовали функции printf и printfn для записи в консоль. В этом разделе мы подробно рассмотримPrintf модуль F #.

Помимо перечисленных выше функций, модуль Core.Printf в F # имеет различные другие методы печати и форматирования с использованием маркеров% в качестве заполнителей. В следующей таблице показаны методы с кратким описанием -

Значение Описание
bprintf: StringBuilder → BuilderFormat <'T> →' T Печатает в StringBuilder.
eprintf: TextWriterFormat <'T> →' T Печатает отформатированный вывод в stderr.
eprintfn: TextWriterFormat <'T> →' T Печатает форматированный вывод в stderr с добавлением новой строки.
failwithf: StringFormat <'T,' Результат> → 'T Печатает в строковый буфер и вызывает исключение с заданным результатом.
fprintf: TextWriter → TextWriterFormat <'T> →' T Печатает автору текста.
fprintfn: TextWriter → TextWriterFormat <'T> →' T Печатает автору текста с добавлением новой строки.
kbprintf: (unit → 'Результат) → StringBuilder → BuilderFormat <' T, 'Результат> →' T Подобно bprintf, но вызывает указанную функцию для генерации результата.
kfprintf: (unit → 'Результат) → TextWriter → TextWriterFormat <' T, 'Результат> →' T Подобно fprintf, но вызывает указанную функцию для генерации результата.
kprintf: (строка → 'Результат) → StringFormat <' T, 'Результат> →' T Подобно printf, но вызывает указанную функцию для генерации результата. Например, они позволяют принудительно смывать печать после того, как весь вывод был введен в канал, но не раньше.
ksprintf: (строка → 'Результат) → StringFormat <' T, 'Результат> →' T Подобно sprintf, но вызывает указанную функцию для генерации результата.
printf: TextWriterFormat <'T> →' T Выводит форматированный вывод на стандартный вывод.
printfn: TextWriterFormat <'T> →' T Печатает форматированный вывод в стандартный вывод, добавляя новую строку.
sprintf: StringFormat <'T> →' T Печатает в строку с использованием внутреннего строкового буфера и возвращает результат в виде строки.

Спецификации формата

Спецификации формата используются для форматирования ввода или вывода в соответствии с потребностями программистов.

Это строки с маркерами%, указывающими заполнители формата.

Синтаксис заполнителей формата:

%[flags][width][.precision][type]

В type интерпретируется как -

Тип Описание
% b Форматы a bool, отформатирован как true или же false.
% c Форматирует символ.
% s Форматы a string, форматируется как его содержимое, без интерпретации каких-либо escape-символов.
% d,% i Форматирует любой базовый целочисленный тип в формате десятичного целого числа со знаком, если основной целочисленный тип подписан.
% u Форматирует любой базовый целочисленный тип как десятичное целое число без знака.
%Икс Форматирует любой базовый целочисленный тип в виде шестнадцатеричного целого числа без знака, используя строчные буквы от a до f.
%ИКС Форматирует любой базовый целочисленный тип в виде шестнадцатеричного целого числа без знака с использованием прописных букв от A до F.
% o Форматирует любой базовый целочисленный тип как восьмеричное целое число без знака.
% e,% E,% f,% F,% g,% G Форматирует любой базовый тип с плавающей запятой (float, float32) форматируется с использованием спецификаций формата с плавающей запятой в стиле C.
% e,% E Форматирует значение со знаком в виде [-] d.dddde [sign] ddd, где d - одна десятичная цифра, dddd - одна или несколько десятичных цифр, ddd - ровно три десятичных цифры, а знак - + или -.
% f Форматирует значение со знаком в форме [-] dddd.dddd, где dddd - одна или несколько десятичных цифр. Количество цифр перед десятичной точкой зависит от величины числа, а количество цифр после десятичной точки зависит от требуемой точности.
% г,% G Форматирует значение со знаком, напечатанное в формате f или e, в зависимости от того, что более компактно для данного значения и точности.
% M Форматирует десятичное значение.
% O Форматирует любое значение, напечатанное, помещая объект в рамку и используя его ToString метод.
% А,% + А Форматирует любое значение, напечатанное с настройками макета по умолчанию. Используйте% + A, чтобы вывести структуру размеченных объединений с внутренними и частными представлениями.
% a

Спецификатор общего формата требует двух аргументов. Первый аргумент - это функция, которая принимает два аргумента: во-первых, параметр контекста соответствующего типа для данной функции форматирования (например, TextWriter), а во-вторых, значение для печати, которое либо выводит, либо возвращает соответствующий текст.

Второй аргумент - это конкретное значение для печати.

% t Спецификатор общего формата требует одного аргумента: функции, которая принимает параметр контекста соответствующего типа для данной функции форматирования (aTextWriter) и которая либо выводит, либо возвращает соответствующий текст. Основные целочисленные типы:byte, sbyte, int16, uint16, int32, uint32, int64, uint64, nativeint, и unativeint. Основные типы с плавающей запятой: float и float32.

В widthнеобязательный параметр. Это целое число, указывающее минимальную ширину результата. Например,% 5d печатает целое число с пробелами не менее 5 символов.

Действительный flags описаны в следующей таблице -

Значение Описание
0 Задает добавление нулей вместо пробелов для получения необходимой ширины.
- Задает выравнивание результата по левому краю в пределах указанной ширины.
+ Задает добавление символа +, если число положительное (чтобы соответствовать знаку - для отрицательных чисел).
' ' (пространство) Указывает на добавление дополнительного пробела, если число положительное (чтобы соответствовать знаку - для отрицательных чисел).
# Недействительным.

пример

printf "Hello "
printf "World"
printfn ""
printfn "Hello "
printfn "World"
printf "Hi, I'm %s and I'm a %s" "Rohit" "Medical Student"

printfn "d: %f" 212.098f
printfn "e: %f" 504.768f

printfn "x: %g" 212.098f
printfn "y: %g" 504.768f

printfn "x: %e" 212.098f
printfn "y: %e" 504.768f
printfn "True: %b" true

Когда вы компилируете и выполняете программу, она дает следующий результат:

Hello World
Hello
World
Hi, I'm Rohit and I'm a Medical Studentd: 212.098000
e: 504.768000
x: 212.098
y: 504.768
x: 2.120980e+002
y: 5.047680e+002
True: true

Консольный класс

Этот класс является частью платформы .NET. Он представляет собой стандартные потоки ввода, вывода и ошибок для консольных приложений.

Он предоставляет различные методы для чтения и записи в консоль. В следующей таблице показаны методы -

Метод Описание
Звуковой сигнал () Воспроизводит звуковой сигнал через динамик консоли.
Звуковой сигнал (Int32, Int32) Воспроизводит звуковой сигнал определенной частоты и длительности через динамик консоли.
Очистить Очищает буфер консоли и соответствующее окно консоли от отображаемой информации.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32) Копирует указанную исходную область экранного буфера в указанную целевую область.
MoveBufferArea (Int32, Int32, Int32, Int32, Int32, Int32, Char, ConsoleColor, ConsoleColor) Копирует указанную исходную область экранного буфера в указанную целевую область.
OpenStandardError () Получает стандартный поток ошибок.
OpenStandardError (Int32) Получает стандартный поток ошибок, для которого задан указанный размер буфера.
OpenStandardInput () Получает стандартный входной поток.
OpenStandardInput (Int32) Получает стандартный входной поток, для которого задан указанный размер буфера.
OpenStandardOutput () Получает стандартный выходной поток.
OpenStandardOutput (Int32) Получает стандартный выходной поток, для которого задан указанный размер буфера.
Читать Читает следующий символ из стандартного входного потока.
ReadKey () Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша отображается в окне консоли.
ReadKey (логический) Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша дополнительно отображается в окне консоли.
ReadLine Читает следующую строку символов из стандартного входного потока.
ResetColor Устанавливает цвета консоли переднего плана и фона по умолчанию.
SetBufferSize Устанавливает высоту и ширину буферной области экрана на указанные значения.
SetCursorPosition Устанавливает позицию курсора.
SetError Устанавливает свойство Error для указанного объекта TextWriter .
SetIn Устанавливает свойство In для указанного объекта TextReader .
SetOut Устанавливает свойство Out для указанного объекта TextWriter .
SetWindowPosition Устанавливает положение окна консоли относительно экранного буфера.
SetWindowSize Устанавливает заданные значения высоты и ширины окна консоли.
Запись (логическое значение) Записывает текстовое представление указанного логического значения в стандартный выходной поток.
Написать (Char) Записывает указанное значение символа Юникода в стандартный выходной поток.
Написать (Char []) Записывает указанный массив символов Юникода в стандартный выходной поток.
Написать (десятичный) Записывает текстовое представление указанного значения Decimal в стандартный выходной поток.
Написать (двойной) Записывает текстовое представление указанного значения с плавающей запятой двойной точности в стандартный выходной поток.
Написать (Int32) Записывает текстовое представление указанного 32-разрядного целого числа со знаком в стандартный выходной поток.
Запись (Int64) Записывает текстовое представление указанного 64-разрядного целого числа со знаком в стандартный выходной поток.
Написать (объект) Записывает текстовое представление указанного объекта в стандартный поток вывода.
Написать (Single) Записывает текстовое представление указанного значения с плавающей запятой одинарной точности в стандартный выходной поток.
Написать (строка) Записывает указанное строковое значение в стандартный выходной поток.
Написать (UInt32) Записывает текстовое представление указанного 32-разрядного целого числа без знака в стандартный поток вывода.
Написать (UInt64) Записывает текстовое представление указанного 64-битового целого числа без знака в стандартный поток вывода.
Запись (строка, объект) Записывает текстовое представление указанного объекта в стандартный поток вывода, используя информацию указанного формата.
Написать (Строка, Объект []) Записывает текстовое представление указанного массива объектов в стандартный выходной поток, используя указанную информацию о формате.
Запись (Char [], Int32, Int32) Записывает указанный подмассив символов Юникода в стандартный выходной поток.
Запись (строка, объект, объект) Записывает текстовое представление указанных объектов в стандартный поток вывода, используя информацию указанного формата.
Запись (строка, объект, объект, объект) Записывает текстовое представление указанных объектов в стандартный поток вывода, используя информацию указанного формата.
Запись (строка, объект, объект, объект, объект) Записывает текстовое представление указанных объектов и список параметров переменной длины в стандартный поток вывода с использованием информации указанного формата.
WriteLine () Записывает терминатор текущей строки в стандартный выходной поток.
WriteLine (логический) Записывает текстовое представление указанного логического значения, за которым следует признак конца текущей строки, в стандартный поток вывода.
WriteLine (симв.) Записывает указанный символ Юникода, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (Char []) Записывает указанный массив символов Юникода, за которым следует признак конца текущей строки, в стандартный поток вывода.
WriteLine (десятичный) Записывает текстовое представление указанного значения Decimal, за которым следует признак конца текущей строки, в стандартный поток вывода.
WriteLine (двойной) Записывает текстовое представление указанного значения с плавающей запятой двойной точности, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (Int32) Записывает текстовое представление указанного 32-битового целого числа со знаком, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (Int64) Записывает текстовое представление указанного 64-разрядного целого числа со знаком, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (объект) Записывает текстовое представление указанного объекта, за которым следует признак конца текущей строки, в стандартный поток вывода.
WriteLine (одиночный) Записывает текстовое представление указанного значения с плавающей запятой одиночной точности, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (строка) Записывает указанное строковое значение, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (UInt32) Записывает текстовое представление указанного 32-битового целого числа без знака, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (UInt64) Записывает текстовое представление указанного 64-битового целого числа без знака, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (строка, объект) Записывает текстовое представление указанного объекта, за которым следует признак конца текущей строки, в стандартный поток вывода с использованием указанной информации о формате.
WriteLine (String, Object []) Записывает текстовое представление указанного массива объектов, за которым следует признак конца текущей строки, в стандартный поток вывода, используя указанную информацию о формате.
WriteLine (Char [], Int32, Int32) Записывает указанный подмассив символов Юникода, за которым следует текущий признак конца строки, в стандартный поток вывода.
WriteLine (строка, объект, объект) Записывает текстовое представление указанных объектов, за которым следует признак конца текущей строки, в стандартный выходной поток, используя указанную информацию о формате.
WriteLine (строка, объект, объект, объект) Записывает текстовое представление указанных объектов, за которым следует признак конца текущей строки, в стандартный выходной поток, используя указанную информацию о формате.
WriteLine (строка, объект, объект, объект, объект) Записывает текстовое представление указанных объектов и список параметров переменной длины, за которым следует признак конца текущей строки, в стандартный выходной поток, используя указанную информацию о формате.

В следующем примере демонстрируется чтение с консоли и запись в нее -

пример

open System
let main() =
   Console.Write("What's your name? ")
   let name = Console.ReadLine()
   Console.Write("Hello, {0}\n", name)
   Console.WriteLine(System.String.Format("Big Greetings from {0} and {1}", "TutorialsPoint", "Absoulte Classes"))
   Console.WriteLine(System.String.Format("|{0:yyyy-MMM-dd}|", System.DateTime.Now))
main()

Когда вы компилируете и выполняете программу, она дает следующий результат:

What's your name? Kabir
Hello, Kabir
Big Greetings from TutorialsPoint and Absoulte Classes
|2015-Jan-05|

Пространство имен System.IO

Пространство имен System.IO содержит множество полезных классов для выполнения базового ввода-вывода.

Он содержит типы или классы, которые позволяют читать и записывать файлы и потоки данных, а также типы, обеспечивающие базовую поддержку файлов и каталогов.

Классы, полезные для работы с файловой системой -

  • Класс System.IO.File используется для создания, добавления и удаления файлов.
  • Класс System.IO.Directory используется для создания, перемещения и удаления каталогов.
  • Класс System.IO.Path выполняет операции со строками, которые представляют пути к файлам.
  • System.IO.FileSystemWatcher класс позволяет пользователям прослушивать каталог на предмет изменений.

Классы, полезные для работы с потоками (последовательность байтов) -

  • Класс System.IO.StreamReader используется для чтения символов из потока.
  • Класс System.IO.StreamWriter используется для записи символов в поток.
  • Класс System.IO.MemoryStream создает поток байтов в памяти.

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

Класс Описание
BinaryReader Считывает примитивные типы данных как двоичные значения в определенной кодировке.
BinaryWriter Записывает примитивные типы в двоичном формате в поток и поддерживает запись строк в определенной кодировке.
Буферизованный поток Добавляет слой буферизации для операций чтения и записи в другом потоке.
Каталог Предоставляет статические методы для создания, перемещения и перечисления каталогов и подкаталогов.
DirectoryInfo Предоставляет методы экземпляра для создания, перемещения и перечисления по каталогам и подкаталогам.
DirectoryNotFoundException Исключение, которое выдается, когда не удается найти часть файла или каталога.
DriveInfo Предоставляет доступ к информации о диске.
DriveNotFoundException Исключение, возникающее при попытке получить доступ к недоступному диску или общему ресурсу.
EndOfStreamException Исключение, возникающее при попытке чтения после конца потока.
ErrorEventArgs Предоставляет данные для события FileSystemWatcher.Error.
файл Предоставляет статические методы для создания, копирования, удаления, перемещения и открытия одного файла, а также помогает в создании объектов FileStream.
FileFormatException Исключение, которое выдается, когда входной файл или поток данных, который должен соответствовать определенной спецификации формата файла, имеет неправильный формат.
FileInfo Предоставляет свойства и методы экземпляра для создания, копирования, удаления, перемещения и открытия файлов, а также помогает в создании объектов FileStream.
FileLoadException Исключение, которое выдается, когда управляемая сборка обнаружена, но не может быть загружена.
FileNotFoundException Исключение, которое выдается при неудачной попытке доступа к файлу, которого нет на диске.
FileStream Предоставляет поток вокруг файла, поддерживая как синхронные, так и асинхронные операции чтения и записи.
FileSystemEventArgs Предоставляет данные для событий каталога - Изменено, Создано, Удалено.
FileSystemInfo Предоставляет базовый класс для объектов FileInfo и DirectoryInfo.
FileSystemWatcher Прослушивает уведомления об изменении файловой системы и генерирует события при изменении каталога или файла в каталоге.
InternalBufferOverflowException Исключение возникает при переполнении внутреннего буфера.
InvalidDataException Исключение, которое выдается, когда поток данных имеет недопустимый формат.
IODescriptionAttribute Задает описание, которое визуальные конструкторы могут отображать при ссылке на событие, расширитель или свойство.
IOException Исключение, которое выдается при возникновении ошибки ввода-вывода.
MemoryStream Создает поток, резервным хранилищем которого является память.
Путь Выполняет операции с экземплярами String, которые содержат информацию о пути к файлу или каталогу. Эти операции выполняются кроссплатформенным образом.
PathTooLongException Исключение, которое выдается, когда путь или имя файла длиннее максимальной длины, определенной системой.
PipeException Вызывается, когда в именованном канале возникает ошибка.
RenamedEventArgs Предоставляет данные для события Renamed.
Поток Предоставляет общее представление о последовательности байтов. Это абстрактный класс.
StreamReader Реализует TextReader, который считывает символы из байтового потока в определенной кодировке.
StreamWriter Реализует TextWriter для записи символов в поток в определенной кодировке. Чтобы просмотреть исходный код .NET Framework для этого типа, см. Справочный источник.
StringReader Реализует TextReader, который читает из строки.
StringWriter Реализует TextWriter для записи информации в строку. Информация хранится в базовом StringBuilder.
TextReader Представляет средство чтения, которое может читать последовательные серии символов.
TextWriter Представляет писателя, который может записывать последовательные серии символов. Этот класс абстрактный.
UnmanagedMemoryAccessor Предоставляет произвольный доступ к неуправляемым блокам памяти из управляемого кода.
НеуправляемыйMemoryStream Предоставляет доступ к неуправляемым блокам памяти из управляемого кода.
WindowsRuntimeStorageExtensions Содержит методы расширения для интерфейсов IStorageFile и IStorageFolder в среде выполнения Windows при разработке приложений Магазина Windows.
WindowsRuntimeStreamExtensions Содержит методы расширения для преобразования между потоками в среде выполнения Windows и управляемыми потоками в .NET для приложений Магазина Windows.

пример

В следующем примере создается файл с именем test.txt, записывается в него сообщение, считывается текст из файла и печатается его на консоли.

Note - Количество кода, необходимого для этого, на удивление меньше!

open System.IO // Name spaces can be opened just as modules
File.WriteAllText("test.txt", "Hello There\n Welcome to:\n Tutorials Point")
let msg = File.ReadAllText("test.txt")
printfn "%s" msg

Когда вы компилируете и выполняете программу, она дает следующий результат:

Hello There
Welcome to:
Tutorials Point