std/streams
Исходный кодИзменитьЭтот модуль предоставляет интерфейс потока и два его реализации: FileStream и StringStream, которые реализуют интерфейс потока для объектов файлов Nim (File) и строк.
Другие модули могут предоставлять другие реализации для этого стандартного интерфейса потока.
pointer, readData, peekData иwriteData интерфейсы недоступны в виртуальной машине во время компиляции и должны быть преобразованы из ptr string на бэкенде JS. Однако readDataStr доступен в общем случае вместо readData.
Основное использование
Основной порядок использования этого модуля:
- Открыть входной поток
- Читать или записывать в поток
- Закрыть поток
Пример StringStream
import std/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 std/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 std/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
Типы
FileStream = ref FileStreamObj
-
Поток, который инкапсулирует
File.Примечание: Недоступен для бэкенда JS.
Исходный код Изменить FileStreamObj = object of Stream
-
Объект потока файла.
Примечание: Недоступен для бэкенда JS.
Исходный код Изменить Stream = ref StreamObj
- Все процедуры этого модуля используют этот тип. Процедуры напрямую не используют StreamObj. Исходный код Изменить
StreamObj = object of RootObj closeImpl*: proc (s: Stream) {.nimcall, ...raises: [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 string): 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.- Объект потока строки. Исходный код Изменить
Процедуры
proc atEnd(s: Stream): bool {....raises: [IOError, OSError], tags: [], forbids: [].}- Проверяет, можно ли прочитать больше данных из
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 close(s: Stream) {....raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}-
Закрывает поток
s.См. также:
Пример:
block: let strm = newStringStream("The first line\nthe second line\nthe third line") ## do something... strm.close() block: let strm = newFileStream("amissingfile.txt") # deferring works even if newFileStream fails defer: strm.close() if not isNil(strm): ## do something...Исходный код Редактировать proc flush(s: Stream) {....raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}-
Очищает буферы, которые может использовать поток
s.Эта процедура вызывает передачу любых не записанных данных для данного потока в среду хоста для записи в файл.
См. также:
Пример:
from std/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 getPosition(s: Stream): int {....raises: [IOError, OSError], tags: [], forbids: [].}- Возвращает текущую позицию в потоке
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 newFileStream(f: File): owned FileStream {....raises: [], tags: [], forbids: [].}-
Создаёт новый поток из файла
f.Примечание: Не доступно для JS-бекенда.
См. также:
- процедура newStringStream создаёт новый поток из строки.
- процедура newFileStream аналогична использованию процедуры open в примерах.
- процедура openFileStream создаёт поток файла из имени файла и режима.
Пример:
## 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: [], forbids: [].}-
Создаёт новый поток из файла с именем
filenameв режимеmode.Если файл не может быть открыт, возвращается
nil. См. модуль io для списка доступных перечислений FileMode.Примечание:
- Эта функция возвращает nil в случае неудачи. Для предотвращения неожиданного поведения и обеспечения правильной обработки ошибок, используйте процедуру openFileStream вместо неё.
- Не доступно для JS-бекенда.
См. также:
- процедура newStringStream создаёт новый поток из строки.
- процедура newFileStream создаёт поток файла из открытого файла.
- процедура openFileStream создаёт поток файла из имени файла и режима.
Пример:
from std/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 newStringStream(s: sink string = ""): owned StringStream {....raises: [], tags: [], forbids: [].}-
Создаёт новый поток из строки
s.См. также:
- процедура newFileStream создаёт поток файла из открытого файла.
- процедура newFileStream создаёт поток файла из имени файла и режима.
- процедура openFileStream создаёт поток файла из имени файла и режима.
Пример:
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 openFileStream(filename: string; mode: FileMode = fmRead; bufSize: int = -1): owned FileStream {....raises: [IOError], tags: [], forbids: [].}-
Создаёт новый поток из файла с именем
filenameв режимеmode. Если файл не может быть открыт, генерируется исключение IO.Примечание: Не доступно для JS-бекенда.
См. также:
- процедура newStringStream создаёт новый поток из строки.
- процедура newFileStream создаёт поток файла из открытого файла.
- процедура newFileStream создаёт поток файла из имени файла и режима.
Пример:
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()Исходный код Редактировать 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 peekBool(s: Stream): bool {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 peekChar(s: Stream): char {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Читает char из потока
s. ГенерируетIOErrorесли произошла ошибка. Возвращает '\0' в качестве маркера EOF.Пример:
var strm = newStringStream("12\n3") doAssert strm.peekChar() == '1' doAssert strm.peekChar() == '1' discard strm.readAll() doAssert strm.peekChar() == '\x00' strm.close()Исходный код Редактировать proc peekData(s: Stream; buffer: pointer; bufLen: int): int {. ...raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Процедура низкого уровня, которая считывает данные в нетипизированный
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 peekFloat32(s: Stream): float32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 peekFloat64(s: Stream): float64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 peekInt8(s: Stream): int8 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 peekInt16(s: Stream): int16 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 peekInt32(s: Stream): int32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает целое число 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 peekInt64(s: Stream): int64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает целое число 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 peekLine(s: Stream): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает строку из потока
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 peekLine(s: Stream; line: var string): bool {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает строку текста из потока
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 peekStr(s: Stream; length: int): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Просматривает строку длиной
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 peekStr(s: Stream; length: int; str: var string) {. ...raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Просматривает строку длиной
lengthиз потокаs. ВызываетIOErrorпри возникновении ошибки. Исходный код Редактировать proc peekUint8(s: Stream): uint8 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает 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 peekUint16(s: Stream): uint16 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает 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 peekUint32(s: Stream): uint32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает 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 peekUint64(s: Stream): uint64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Просматривает 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 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 readAll(s: Stream): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Читает все доступные данные.
Пример:
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 readBool(s: Stream): bool {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 readChar(s: Stream): char {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает char из потока
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 readData(s: Stream; buffer: pointer; bufLen: int): int {. ...raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Процедура низкого уровня, которая читает данные в нетипизированный
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], forbids: [].}- Процедура низкого уровня, которая читает данные в строку
bufferпо адресуslice.Пример:
var strm = newStringStream("abcde") var buffer = "12345" doAssert strm.readDataStr(buffer, 0..3) == 4 doAssert buffer == "abcd5" strm.close()Исходный код Редактировать proc readFloat32(s: Stream): float32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Читает 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 readFloat64(s: Stream): float64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readInt8(s: Stream): int8 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readInt16(s: Stream): int16 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readInt32(s: Stream): int32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readInt64(s: Stream): int64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readLine(s: Stream): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает строку из потока
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 readLine(s: Stream; line: var string): bool {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает строку текста из потока
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 readStr(s: Stream; length: int): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Считывает строку длиной
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 readStr(s: Stream; length: int; str: var string) {. ...raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}- Считывает строку длиной
lengthиз потокаs. ВызываетIOErrorв случае ошибки. Исходный код Редактировать proc readUint8(s: Stream): uint8 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readUint16(s: Stream): uint16 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readUint32(s: Stream): uint32 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 readUint64(s: Stream): uint64 {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Считывает 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 setPosition(s: Stream; pos: int) {....raises: [IOError, OSError], tags: [], forbids: [].}- Устанавливает позицию
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 write(s: Stream; args: varargs[string, `$`]) {....raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}- Записывает одну или несколько строк в поток. Не записываются поля длины или завершающие нули.
Пример:
var strm = newStringStream("") strm.write(1, 2, 3, 4) strm.setPosition(0) doAssert strm.readLine() == "1234" strm.close()Исходный код Редактировать proc write(s: Stream; x: string) {....raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}- Записывает строку
xв потокs. Не записывается поле длины или завершающий ноль.Пример:
var strm = newStringStream("") strm.write("THE FIRST LINE") strm.setPosition(0) doAssert strm.readLine() == "THE FIRST LINE" 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 writeData(s: Stream; buffer: pointer; bufLen: int) {. ...raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}-
Процедура низкого уровня, которая записывает нетипизированный
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 writeLine(s: Stream; args: varargs[string, `$`]) {. ...raises: [IOError, OSError], tags: [WriteIOEffect], forbids: [].}- Записывает одну или несколько строк в поток
s, после чего переходит на новую строку. Поле длины или завершающий нуль не записываются.Пример:
var strm = newStringStream("") strm.writeLine(1, 2) strm.writeLine(3, 4) strm.setPosition(0) doAssert strm.readAll() == "12\n34\n" strm.close()Исходный код Редактировать
Итераторы
iterator lines(s: Stream): string {....raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}-
Итерируется по каждой строке в потоке. Итерация основана на
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–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/streams.html