потоки
Этот модуль предоставляет интерфейс потока и два его реализации: FileStream и StringStream, которые реализуют интерфейс потока для объектов файлов Nim (File) и строк.
Другие модули могут предоставлять другие реализации для этого стандартного интерфейса потока.
Основное использование
Основной порядок использования этого модуля:
- Открыть входной поток
- Читать или записывать в поток
- Закрыть поток
Пример StringStream
import streams
var strm = newStringStream("""The first line
the second line
the third line""")
var line = ""
while strm.readLine(line):
echo line
# Output:
# The first line
# the second line
# the third line
strm.close() Пример FileStream
Пример записи в поток файла:
import streams
var strm = newFileStream("somefile.txt", fmWrite)
var line = ""
if not isNil(strm):
strm.writeLine("The first line")
strm.writeLine("the second line")
strm.writeLine("the third line")
strm.close()
# Output (somefile.txt):
# The first line
# the second line
# the third line
Пример чтения из потока файла:
import streams
var strm = newFileStream("somefile.txt", fmRead)
var line = ""
if not isNil(strm):
while strm.readLine(line):
echo line
strm.close()
# Output:
# The first line
# the second line
# the third line См. также
Импорты
- since
Типы
Stream = ref StreamObj
- Все процедуры этого модуля используют этот тип. Процедуры напрямую не используют StreamObj. Исходный код Редактировать
StreamObj = object of RootObj closeImpl*: proc (s: Stream) {...}{.nimcall, raises: [Exception, IOError, OSError], tags: [WriteIOEffect], gcsafe.} atEndImpl*: proc (s: Stream): bool {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [], gcsafe.} setPositionImpl*: proc (s: Stream; pos: int) {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [], gcsafe.} getPositionImpl*: proc (s: Stream): int {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [], gcsafe.} readDataStrImpl*: proc (s: Stream; buffer: var string; slice: Slice[int]): int {...}{. nimcall, raises: [Defect, IOError, OSError], tags: [ReadIOEffect], gcsafe.} readLineImpl*: proc (s: Stream; line: var TaintedString): bool {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [ReadIOEffect], gcsafe.} readDataImpl*: proc (s: Stream; buffer: pointer; bufLen: int): int {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [ReadIOEffect], gcsafe.} peekDataImpl*: proc (s: Stream; buffer: pointer; bufLen: int): int {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [ReadIOEffect], gcsafe.} writeDataImpl*: proc (s: Stream; buffer: pointer; bufLen: int) {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [WriteIOEffect], gcsafe.} flushImpl*: proc (s: Stream) {...}{.nimcall, raises: [Defect, IOError, OSError], tags: [WriteIOEffect], gcsafe.}-
Интерфейс потока, поддерживающий запись или чтение.
Примечание:
- Эти поля здесь не должны использоваться напрямую. Они доступны, чтобы реализация потока могла их переопределить.
StringStream = ref StringStreamObj
- Поток, инкапсулирующий строку. Исходный код Редактировать
StringStreamObj = object of StreamObj data*: string ## A string data. ## This is updated when called `writeLine` etc. pos: int- Объект потока строки. Исходный код Редактировать
FileStream = ref FileStreamObj
-
Поток, инкапсулирующий
File.Примечание: Не доступно для JS-бекенда.
Исходный код Редактировать FileStreamObj = object of Stream f: File
-
Объект потока файла.
Примечание: Не доступно для JS-бекенда.
Исходный код Редактировать
Процедуры
proc flush(s: Stream) {...}{.raises: [IOError, OSError], tags: [WriteIOEffect].}-
Очищает буферы, которые может использовать поток
s.Эта процедура заставляет любые не записанные данные для этого потока быть переданы в среду хоста для записи в файл.
См. также:
Пример:
from os import removeFile var strm = newFileStream("somefile.txt", fmWrite) doAssert "Before write:" & readFile("somefile.txt") == "Before write:" strm.write("hello") doAssert "After write:" & readFile("somefile.txt") == "After write:" strm.flush() doAssert "After flush:" & readFile("somefile.txt") == "After flush:hello" strm.write("HELLO") strm.flush() doAssert "After flush:" & readFile("somefile.txt") == "After flush:helloHELLO" strm.close() doAssert "After close:" & readFile("somefile.txt") == "After close:helloHELLO" removeFile("somefile.txt")Исходный код Редактировать proc close(s: Stream) {...}{.raises: [Exception, IOError, OSError], tags: [WriteIOEffect].}-
Закрывает поток
s.См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") ## do something... strm.close()Исходный код Редактировать proc atEnd(s: Stream): bool {...}{.raises: [IOError, OSError], tags: [].}- Проверяет, можно ли прочитать больше данных из
s. Возвращаетtrue, если все данные были прочитаны.Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") var line = "" doAssert strm.atEnd() == false while strm.readLine(line): discard doAssert strm.atEnd() == true strm.close()Исходный код Редактировать proc setPosition(s: Stream; pos: int) {...}{.raises: [IOError, OSError], tags: [].}- Устанавливает позицию
posпотокаs.Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") strm.setPosition(4) doAssert strm.readLine() == "first line" strm.setPosition(0) doAssert strm.readLine() == "The first line" strm.close()Исходный код Редактировать proc getPosition(s: Stream): int {...}{.raises: [IOError, OSError], tags: [].}- Возвращает текущую позицию в потоке
s.Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") doAssert strm.getPosition() == 0 discard strm.readLine() doAssert strm.getPosition() == 15 strm.close()Исходный код Редактировать proc readData(s: Stream; buffer: pointer; bufLen: int): int {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}-
Процедура низкого уровня, которая считывает данные в нетипизированный
bufferразмераbufLen.Примечание для JS:
bufferобрабатывается какptr stringи записывается между0..<bufLen.Пример:
var strm = newStringStream("abcde") var buffer: array[6, char] doAssert strm.readData(addr(buffer), 1024) == 5 doAssert buffer == ['a', 'b', 'c', 'd', 'e', '\x00'] doAssert strm.atEnd() == true strm.close()Исходный код Редактировать proc readDataStr(s: Stream; buffer: var string; slice: Slice[int]): int {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}- Процедура низкого уровня, которая считывает данные в строку
bufferпо позицииslice.Пример:
var strm = newStringStream("abcde") var buffer = "12345" doAssert strm.readDataStr(buffer, 0..3) == 4 doAssert buffer == "abcd5" strm.close()Исходный код Редактировать proc readAll(s: Stream): string {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Считывает все доступные данные.
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") doAssert strm.readAll() == "The first line\nthe second line\nthe third line" doAssert strm.atEnd() == true strm.close()Исходный код Редактировать proc peekData(s: Stream; buffer: pointer; bufLen: int): int {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}-
Процедура низкого уровня, которая считывает данные в нетипизированный
bufferразмераbufLenбез изменения позиции потока.Примечание для JS:
bufferобрабатывается какptr stringи записывается между0..<bufLen.Пример:
var strm = newStringStream("abcde") var buffer: array[6, char] doAssert strm.peekData(addr(buffer), 1024) == 5 doAssert buffer == ['a', 'b', 'c', 'd', 'e', '\x00'] doAssert strm.atEnd() == false strm.close()Исходный код Редактировать proc writeData(s: Stream; buffer: pointer; bufLen: int) {...}{. raises: [IOError, OSError], tags: [WriteIOEffect].}-
Процедура низкого уровня, которая записывает нетипизированный
bufferразмераbufLenв потокs.Примечание для JS:
bufferобрабатывается какptr stringи читается между0..<bufLen.Пример:
## writeData var strm = newStringStream("") var buffer = ['a', 'b', 'c', 'd', 'e'] strm.writeData(addr(buffer), sizeof(buffer)) doAssert strm.atEnd() == true ## readData strm.setPosition(0) var buffer2: array[6, char] doAssert strm.readData(addr(buffer2), sizeof(buffer2)) == 5 doAssert buffer2 == ['a', 'b', 'c', 'd', 'e', '\x00'] strm.close()Исходный код Редактировать proc write[T](s: Stream; x: T)
-
Процедура записи общего назначения. Записывает
xв потокs. Реализация:Примечание: Недоступно для JS-бекенда. Используйте write(Stream, string) на данный момент.
s.writeData(s, unsafeAddr(x), sizeof(x))
Пример:
var strm = newStringStream("") strm.write("abcde") strm.setPosition(0) doAssert strm.readAll() == "abcde" strm.close()Исходный код Редактировать proc write(s: Stream; x: string) {...}{.raises: [IOError, OSError], tags: [WriteIOEffect].}- Записывает строку
xв потокs. Не записывается поле длины или завершающий ноль.Пример:
var strm = newStringStream("") strm.write("THE FIRST LINE") strm.setPosition(0) doAssert strm.readLine() == "THE FIRST LINE" strm.close()Исходный код Редактировать proc write(s: Stream; args: varargs[string, `$`]) {...}{.raises: [IOError, OSError], tags: [WriteIOEffect].}- Записывает одну или несколько строк в поток. Не записываются поля длины или завершающие нули.
Пример:
var strm = newStringStream("") strm.write(1, 2, 3, 4) strm.setPosition(0) doAssert strm.readLine() == "1234" strm.close()Исходный код Редактировать proc writeLine(s: Stream; args: varargs[string, `$`]) {...}{. raises: [IOError, OSError], tags: [WriteIOEffect].}- Записывает одну или несколько строк в поток
sс последующей новой строкой. Не записывается поле длины или завершающий ноль.Пример:
var strm = newStringStream("") strm.writeLine(1, 2) strm.writeLine(3, 4) strm.setPosition(0) doAssert strm.readAll() == "12\n34\n" strm.close()Исходный код Редактировать proc read[T](s: Stream; result: var T)
-
Процедура чтения общего назначения. Читает
resultиз потокаs.Примечание: Недоступно для JS-бекенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream("012") ## readInt var i: int8 strm.read(i) doAssert i == 48 ## readData var buffer: array[2, char] strm.read(buffer) doAssert buffer == ['1', '2'] strm.close()Исходный код Редактировать proc peek[T](s: Stream; result: var T)
-
Процедура предварительного просмотра общего назначения. Предварительно просматривает
resultиз потокаs.Примечание: Недоступно для JS-бекенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream("012") ## peekInt var i: int8 strm.peek(i) doAssert i == 48 ## peekData var buffer: array[2, char] strm.peek(buffer) doAssert buffer == ['0', '1'] strm.close()Исходный код Редактировать proc readChar(s: Stream): char {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает символ из потока
s.Возбуждает
IOErrorесли произошла ошибка. Возвращает '\0' как маркер конца файла.Пример:
var strm = newStringStream("12\n3") doAssert strm.readChar() == '1' doAssert strm.readChar() == '2' doAssert strm.readChar() == '\n' doAssert strm.readChar() == '3' doAssert strm.readChar() == '\x00' strm.close()Исходный код Редактировать proc peekChar(s: Stream): char {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Предварительно просматривает символ из потока
s. ВозбуждаетIOErrorесли произошла ошибка. Возвращает '\0' как маркер конца файла.Пример:
var strm = newStringStream("12\n3") doAssert strm.peekChar() == '1' doAssert strm.peekChar() == '1' discard strm.readAll() doAssert strm.peekChar() == '\x00' strm.close()Исходный код Редактировать proc readBool(s: Stream): bool {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает bool из потока
s.bool имеет длину один байт и соответствует значению
trueдля каждого ненулевого (0000_0000) значения. ВозбуждаетIOErrorесли произошла ошибка.Примечание: Недоступно для JS-бекенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(true) strm.write(false) strm.flush() strm.setPosition(0) ## get data doAssert strm.readBool() == true doAssert strm.readBool() == false doAssertRaises(IOError): discard strm.readBool() strm.close()
Исходный код Редактировать proc peekBool(s: Stream): bool {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Предварительно просматривает bool из потока
s.bool имеет длину один байт и соответствует значению
trueдля каждого ненулевого (0000_0000) значения. ВозбуждаетIOErrorесли произошла ошибка.Примечание: Недоступно для JS-бекенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(true) strm.write(false) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekBool() == true ## not false doAssert strm.peekBool() == true doAssert strm.readBool() == true doAssert strm.peekBool() == false strm.close()
Исходный код Редактировать proc readInt8(s: Stream): int8 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает int8 из потока
s. ВозбуждаетIOErrorесли произошла ошибка.Примечание: Недоступно для JS-бекенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i8) strm.write(2'i8) strm.flush() strm.setPosition(0) ## get data doAssert strm.readInt8() == 1'i8 doAssert strm.readInt8() == 2'i8 doAssertRaises(IOError): discard strm.readInt8() strm.close()
Исходный код Редактировать proc peekInt8(s: Stream): int8 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Предварительно просматривает int8 из потока
s. ВозбуждаетIOErrorесли произошла ошибка.Примечание: Недоступно для JS-бекенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i8) strm.write(2'i8) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekInt8() == 1'i8 ## not 2'i8 doAssert strm.peekInt8() == 1'i8 doAssert strm.readInt8() == 1'i8 doAssert strm.peekInt8() == 2'i8 strm.close()
Исходный код Редактировать proc readInt16(s: Stream): int16 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}
-
Считывает int16 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i16) strm.write(2'i16) strm.flush() strm.setPosition(0) ## get data doAssert strm.readInt16() == 1'i16 doAssert strm.readInt16() == 2'i16 doAssertRaises(IOError): discard strm.readInt16() strm.close()
Исходный код Изменить proc peekInt16(s: Stream): int16 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает int16 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i16) strm.write(2'i16) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekInt16() == 1'i16 ## not 2'i16 doAssert strm.peekInt16() == 1'i16 doAssert strm.readInt16() == 1'i16 doAssert strm.peekInt16() == 2'i16 strm.close()
Исходный код Изменить proc readInt32(s: Stream): int32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает int32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i32) strm.write(2'i32) strm.flush() strm.setPosition(0) ## get data doAssert strm.readInt32() == 1'i32 doAssert strm.readInt32() == 2'i32 doAssertRaises(IOError): discard strm.readInt32() strm.close()
Исходный код Изменить proc peekInt32(s: Stream): int32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает int32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i32) strm.write(2'i32) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekInt32() == 1'i32 ## not 2'i32 doAssert strm.peekInt32() == 1'i32 doAssert strm.readInt32() == 1'i32 doAssert strm.peekInt32() == 2'i32 strm.close()
Исходный код Изменить proc readInt64(s: Stream): int64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает int64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i64) strm.write(2'i64) strm.flush() strm.setPosition(0) ## get data doAssert strm.readInt64() == 1'i64 doAssert strm.readInt64() == 2'i64 doAssertRaises(IOError): discard strm.readInt64() strm.close()
Исходный код Изменить proc peekInt64(s: Stream): int64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает int64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'i64) strm.write(2'i64) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekInt64() == 1'i64 ## not 2'i64 doAssert strm.peekInt64() == 1'i64 doAssert strm.readInt64() == 1'i64 doAssert strm.peekInt64() == 2'i64 strm.close()
Исходный код Изменить proc readUint8(s: Stream): uint8 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает uint8 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u8) strm.write(2'u8) strm.flush() strm.setPosition(0) ## get data doAssert strm.readUint8() == 1'u8 doAssert strm.readUint8() == 2'u8 doAssertRaises(IOError): discard strm.readUint8() strm.close()
Исходный код Изменить proc peekUint8(s: Stream): uint8 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает uint8 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u8) strm.write(2'u8) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekUint8() == 1'u8 ## not 2'u8 doAssert strm.peekUint8() == 1'u8 doAssert strm.readUint8() == 1'u8 doAssert strm.peekUint8() == 2'u8 strm.close()
Исходный код Изменить proc readUint16(s: Stream): uint16 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает uint16 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u16) strm.write(2'u16) strm.flush() strm.setPosition(0) ## get data doAssert strm.readUint16() == 1'u16 doAssert strm.readUint16() == 2'u16 doAssertRaises(IOError): discard strm.readUint16() strm.close()
Исходный код Изменить proc peekUint16(s: Stream): uint16 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает uint16 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u16) strm.write(2'u16) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekUint16() == 1'u16 ## not 2'u16 doAssert strm.peekUint16() == 1'u16 doAssert strm.readUint16() == 1'u16 doAssert strm.peekUint16() == 2'u16 strm.close()
Исходный код Изменить proc readUint32(s: Stream): uint32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает uint32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u32) strm.write(2'u32) strm.flush() strm.setPosition(0) ## get data doAssert strm.readUint32() == 1'u32 doAssert strm.readUint32() == 2'u32 doAssertRaises(IOError): discard strm.readUint32() strm.close()
Исходный код Изменить proc peekUint32(s: Stream): uint32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает uint32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u32) strm.write(2'u32) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekUint32() == 1'u32 ## not 2'u32 doAssert strm.peekUint32() == 1'u32 doAssert strm.readUint32() == 1'u32 doAssert strm.peekUint32() == 2'u32 strm.close()
Исходный код Изменить proc readUint64(s: Stream): uint64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает uint64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u64) strm.write(2'u64) strm.flush() strm.setPosition(0) ## get data doAssert strm.readUint64() == 1'u64 doAssert strm.readUint64() == 2'u64 doAssertRaises(IOError): discard strm.readUint64() strm.close()
Исходный код Изменить proc peekUint64(s: Stream): uint64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает uint64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'u64) strm.write(2'u64) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekUint64() == 1'u64 ## not 2'u64 doAssert strm.peekUint64() == 1'u64 doAssert strm.readUint64() == 1'u64 doAssert strm.peekUint64() == 2'u64 strm.close()
Исходный код Изменить proc readFloat32(s: Stream): float32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает float32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'f32) strm.write(2'f32) strm.flush() strm.setPosition(0) ## get data doAssert strm.readFloat32() == 1'f32 doAssert strm.readFloat32() == 2'f32 doAssertRaises(IOError): discard strm.readFloat32() strm.close()
Исходный код Изменить proc peekFloat32(s: Stream): float32 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает float32 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'f32) strm.write(2'f32) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekFloat32() == 1'f32 ## not 2'f32 doAssert strm.peekFloat32() == 1'f32 doAssert strm.readFloat32() == 1'f32 doAssert strm.peekFloat32() == 2'f32 strm.close()
Исходный код Изменить proc readFloat64(s: Stream): float64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Считывает float64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте readStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'f64) strm.write(2'f64) strm.flush() strm.setPosition(0) ## get data doAssert strm.readFloat64() == 1'f64 doAssert strm.readFloat64() == 2'f64 doAssertRaises(IOError): discard strm.readFloat64() strm.close()
Исходный код Изменить proc peekFloat64(s: Stream): float64 {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает float64 из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Недоступно для JS бэкенда. Используйте peekStr на данный момент.
Пример:
var strm = newStringStream() ## setup for reading data strm.write(1'f64) strm.write(2'f64) strm.flush() strm.setPosition(0) ## get data doAssert strm.peekFloat64() == 1'f64 ## not 2'f64 doAssert strm.peekFloat64() == 1'f64 doAssert strm.readFloat64() == 1'f64 doAssert strm.peekFloat64() == 2'f64 strm.close()
Исходный код Изменить proc readStr(s: Stream; length: int; str: var TaintedString) {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}- Считывает строку длины
lengthиз потокаs. ВызываетIOErrorпри возникновении ошибки. Исходный код Изменить proc readStr(s: Stream; length: int): TaintedString {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}- Считывает строку длины
lengthиз потокаs. ВызываетIOErrorпри возникновении ошибки.Пример:
var strm = newStringStream("abcde") doAssert strm.readStr(2) == "ab" doAssert strm.readStr(2) == "cd" doAssert strm.readStr(2) == "e" doAssert strm.readStr(2) == "" strm.close()Исходный код Изменить proc peekStr(s: Stream; length: int; str: var TaintedString) {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}- Просматривает строку длины
lengthиз потокаs. ВызываетIOErrorпри возникновении ошибки. Исходный код Изменить proc peekStr(s: Stream; length: int): TaintedString {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}
- Просматривает строку длиной
lengthиз потокаs. ВызываетIOErrorпри возникновении ошибки.Пример:
var strm = newStringStream("abcde") doAssert strm.peekStr(2) == "ab" ## not "cd doAssert strm.peekStr(2) == "ab" doAssert strm.readStr(2) == "ab" doAssert strm.peekStr(2) == "cd" strm.close()Исходный код Редактировать proc readLine(s: Stream; line: var TaintedString): bool {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}-
Читает строку текста из потока
sвline.lineне должно бытьnil! Может выбросить исключение IO.Строка текста может быть ограничена
LFилиCRLF. Символ(ы) новой строки не являются частью возвращаемой строки. Возвращаетfalseв случае достижения конца файла,trueв противном случае. Если возвращаетсяfalse,lineне содержит новых данных.См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") var line = "" doAssert strm.readLine(line) == true doAssert line == "The first line" doAssert strm.readLine(line) == true doAssert line == "the second line" doAssert strm.readLine(line) == true doAssert line == "the third line" doAssert strm.readLine(line) == false doAssert line == "" strm.close()Исходный код Редактировать proc peekLine(s: Stream; line: var TaintedString): bool {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает строку текста из потока
sвline.lineне должно бытьnil! Может выбросить исключение IO.Строка текста может быть ограничена
CR,LFилиCRLF. Символ(ы) новой строки не являются частью возвращаемой строки. Возвращаетfalseв случае достижения конца файла,trueв противном случае. Если возвращаетсяfalse,lineне содержит новых данных.См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") var line = "" doAssert strm.peekLine(line) == true doAssert line == "The first line" doAssert strm.peekLine(line) == true ## not "the second line" doAssert line == "The first line" doAssert strm.readLine(line) == true doAssert line == "The first line" doAssert strm.peekLine(line) == true doAssert line == "the second line" strm.close()Исходный код Редактировать proc readLine(s: Stream): TaintedString {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Читает строку из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Это не очень эффективно.
См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") doAssert strm.readLine() == "The first line" doAssert strm.readLine() == "the second line" doAssert strm.readLine() == "the third line" doAssertRaises(IOError): discard strm.readLine() strm.close()Исходный код Редактировать proc peekLine(s: Stream): TaintedString {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Просматривает строку из потока
s. ВызываетIOErrorпри возникновении ошибки.Примечание: Это не очень эффективно.
См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") doAssert strm.peekLine() == "The first line" ## not "the second line" doAssert strm.peekLine() == "The first line" doAssert strm.readLine() == "The first line" doAssert strm.peekLine() == "the second line" strm.close()Исходный код Редактировать proc newStringStream(s: string = ""): owned StringStream {...}{.raises: [], tags: [].}-
Создает новый поток из строки
s.См. также:
- newFileStream proc создает поток файла из открытого файла.
- newFileStream proc создает поток файла из имени файла и режима.
- openFileStream proc создает поток файла из имени файла и режима.
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") doAssert strm.readLine() == "The first line" doAssert strm.readLine() == "the second line" doAssert strm.readLine() == "the third line" strm.close()Исходный код Редактировать proc newFileStream(f: File): owned FileStream {...}{.raises: [], tags: [].}-
Создает новый поток из файла
f.Примечание: Недоступно для JS-бекенда.
См. также:
- newStringStream proc создает новый поток из строки.
- newFileStream proc аналогичен использованию open proc в примерах.
- openFileStream proc создает поток файла из имени файла и режима.
Пример:
## Input (somefile.txt): ## The first line ## the second line ## the third line var f: File if open(f, "somefile.txt", fmRead, -1): var strm = newFileStream(f) var line = "" while strm.readLine(line): echo line ## Output: ## The first line ## the second line ## the third line strm.close()Исходный код Редактировать proc newFileStream(filename: string; mode: FileMode = fmRead; bufSize: int = -1): owned FileStream {...}{.raises: [], tags: [].}-
Создает новый поток из файла с именем
filenameс режимомmode.Если файл не может быть открыт, возвращается
nil. Список доступных перечислений FileMode см. в модуле io.Примечание:
- Эта функция возвращает nil в случае ошибки. Чтобы избежать неожиданного поведения и обеспечить надлежащую обработку ошибок, используйте openFileStream proc вместо этого.
- Недоступно для JS-бекенда.
См. также:
- newStringStream proc создает новый поток из строки.
- newFileStream proc создает поток файла из открытого файла.
- openFileStream proc создает поток файла из имени файла и режима.
Пример:
from os import removeFile var strm = newFileStream("somefile.txt", fmWrite) if not isNil(strm): strm.writeLine("The first line") strm.writeLine("the second line") strm.writeLine("the third line") strm.close() ## Output (somefile.txt) ## The first line ## the second line ## the third line removeFile("somefile.txt")Исходный код Редактировать proc openFileStream(filename: string; mode: FileMode = fmRead; bufSize: int = -1): owned FileStream {...}{.raises: [IOError], tags: [].}-
Создает новый поток из файла с именем
filenameс режимомmode. Если файл не может быть открыт, возникает исключение IO.Примечание: Недоступно для JS-бекенда.
См. также:
- newStringStream proc создает новый поток из строки.
- newFileStream proc создает поток файла из открытого файла.
- newFileStream proc создает поток файла из имени файла и режима.
Пример:
try: ## Input (somefile.txt): ## The first line ## the second line ## the third line var strm = openFileStream("somefile.txt") echo strm.readLine() ## Output: ## The first line strm.close() except: stderr.write getCurrentExceptionMsg()Исходный код Редактировать
Итераторы
iterator lines(s: Stream): TaintedString {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}-
Итерируется по каждой строке в потоке. Итерация основана на
readLine.См. также:
Пример:
var strm = newStringStream("The first line\nthe second line\nthe third line") var lines: seq[string] for line in strm.lines(): lines.add line doAssert lines == @["The first line", "the second line", "the third line"] strm.close()Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/streams.html