Выполняет чтение строки текста до разделителя строки. Если разделитель не найден, чтение выполняется до конца потока. Если разделитель строки не задан явно, используется разделитель строки, указанный для данного экземпляра объекта ЧтениеДанных.
Синтаксис
ПрочитатьСтроку(<КодировкаТекста>, <РазделительСтрок>)Полное описание, параметры и ограничения
ЧтениеДанных.ПрочитатьСтроку (DataReader.ReadLine)
ЧтениеДанных (DataReader)
ПрочитатьСтроку (ReadLine)
Доступен, начиная с версии 8.3.9.
Синтаксис:
ПрочитатьСтроку(<КодировкаТекста>, <РазделительСтрок>)
Параметры:
<КодировкаТекста> (необязательный)
Тип: КодировкаТекста, Строка.
Кодировка текста. Если не установлена, используется кодировка, заданная для текущего экземпляра ЧтениеДанных.
Значение по умолчанию: Неопределено.
<РазделительСтрок> (необязательный)
Тип: Строка.
Указывает строку, являющуюся разделителем строк в читаемых данных. Если параметр не указан, используется разделитель строк, указанный для текущего экземпляра объекта ЧтениеДанных.
Значение по умолчанию: Неопределено.
Возвращаемое значение:
Тип: Строка.
Описание:
Выполняет чтение строки текста до разделителя строки. Если разделитель не найден, чтение выполняется до конца потока.
Если разделитель строки не задан явно, используется разделитель строки, указанный для данного экземпляра объекта ЧтениеДанных.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Примечание:
По умолчанию, в качестве разделителя строки выступают следующие строки:
ВК,
ПС,
ВК,
ВК + ПС,
См. также:
ЧтениеДанных, метод НачатьЧтениеСтроки
ЧтениеДанных, метод ПрочитатьСтрокуАсинх
ЧтениеДанных, метод Прочитать
Использование в версии:
Доступен, начиная с версии 8.3.9.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Создать только свой временный текстовый файл и прочитать его конструкторами по имени
Отдельное упражнение для файловых перегрузок: уникальное имя, проверка отсутствия файла, запись двух строк, чтение и удаление именно созданного файла.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Отдельная учебная база; серверный фрагмент внутри ВыполнитьПример() Экспорт. Потребуется право создания файла во временном каталоге сервера/файлового режима.
Не заменяйте ПолучитьИмяВременногоФайла на путь своего существующего файла. Имена конфигурационных выгрузок и документов здесь не используются.
В отличие от упражнений в памяти этот пример действительно создаёт и затем удаляет ОДИН свой временный txt. Удалённый учебный файл не восстанавливается кодом.
Не запускайте одновременно несколько копий, вручную изменённых на одно и то же фиксированное имя.
ИмяФайла = ПолучитьИмяВременногоФайла("txt");
ПроверкаФайла = Новый Файл(ИмяФайла);
Если ПроверкаФайла.Существует() Тогда
ВызватьИсключение "Не перезаписываем существующий файл даже с учебным именем";
КонецЕсли;
Запись = Неопределено;
Чтение = Неопределено;
Попытка
Запись = Новый ЗаписьДанных(ИмяФайла, КодировкаТекста.UTF8, , Символы.ПС, Ложь, , Ложь);
Запись.ЗаписатьСтроку("Книга");
Запись.ЗаписатьСтроку("Ручка");
Запись.Закрыть();
Запись = Неопределено;
Чтение = Новый ЧтениеДанных(ИмяФайла, КодировкаТекста.UTF8, , Символы.ПС);
Сообщить(Чтение.ПрочитатьСтроку() = "Книга");
Сообщить(Чтение.ПрочитатьСтроку() = "Ручка");
Чтение.Закрыть();
Чтение = Неопределено;
УдалитьФайлы(ИмяФайла);
Исключение
Если Чтение <> Неопределено Тогда
Чтение.Закрыть();
КонецЕсли;
Если Запись <> Неопределено Тогда
Запись.Закрыть();
КонецЕсли;
// Имя получено для этой задачи и проверено как отсутствующее до создания.
Если ПроверкаФайла.Существует() Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ПроверкаФайла.Существует());Разбор по шагам
Генерируем временное имя и отказываемся работать, если по нему уже есть файл.
Конструктор ЗаписьДанных с первым аргументом Строка открывает файл. Пятый аргумент Дописать=Ложь, поэтому защита от существующего файла важна.
Конструктор по имени владеет открытым файловым потоком. Закрыть завершает запись и закрывает вложенный файл.
Создаём ЧтениеДанных по тому же имени, читаем две строки в UTF-8 и закрываем его до удаления файла.
УдалитьФайлы вызывается с точным уникальным именем, без маски и без каталога. Последняя проверка подтверждает отсутствие своего файла.
Как проверить результат
Три сообщения Истина: восстановлены Книга/Ручка и свой временный файл удалён.
Нет ни перезаписи рабочего файла, ни удаления других файлов каталога.
Ожидаемый результат
Обе файловые перегрузки конструктора показаны на управляемом собственном временном файле.
На что обратить внимание
На сервере путь относится к серверной машине, не обязательно к рабочему столу пользователя.
При аварийном завершении процесса cleanup не выполняется и учебный временный файл может остаться.
Удалять каталог временных файлов целиком ради уборки этого упражнения нельзя.
Ошибки прав доступа/закрытия файлов возможны и должны проверяться отдельно в вашей среде.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отличить запись символов от записи строки с разделителем
Создаём в памяти текст Книга/Ручка в UTF-8. У строки есть завершающий перевод строки; у простого набора символов его нет.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8, , Символы.ПС, Символы.ВК + Символы.ПС, Ложь);
Попытка
Сообщить(Запись.КодировкаТекста = КодировкаТекста.UTF8);
Сообщить(Запись.РазделительСтрок = Символы.ПС);
Сообщить(Запись.КонвертируемыйРазделительСтрок = Символы.ВК + Символы.ПС);
Запись.ЗаписатьСимволы("Книга" + Символы.ПС);
Запись.ЗаписатьСтроку("Ручка");
Исключение
Запись.Закрыть();
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Запись.Закрыть();
Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
СыройТекст = ПолучитьСтрокуИзДвоичныхДанных(Данные, КодировкаТекста.UTF8);
Сообщить(СыройТекст = "Книга" + Символы.ВК + Символы.ПС + "Ручка" + Символы.ПС);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8, , , Символы.ВК + Символы.ПС);
Попытка
Сообщить(Чтение.КодировкаТекста = КодировкаТекста.UTF8);
Сообщить(Чтение.КонвертируемыйРазделительСтрок = Символы.ВК + Символы.ПС);
Нормализованный = Чтение.ПрочитатьСимволы();
Сообщить(Нормализованный = "Книга" + Символы.ПС + "Ручка" + Символы.ПС);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ЧтениеСтрок = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
Сообщить(ЧтениеСтрок.ПрочитатьСтроку() = "Книга");
Сообщить(ЧтениеСтрок.ПрочитатьСтроку() = "Ручка");
Исключение
ЧтениеСтрок.Закрыть();
ВызватьИсключение;
КонецПопытки;
ЧтениеСтрок.Закрыть();Разбор по шагам
В конструкторе ЗаписьДанных явно указаны кодировка UTF-8, разделитель для ЗаписатьСтроку ПС, конвертируемый разделитель ВК+ПС и отсутствие BOM.
ЗаписатьСимволы не добавляет разделитель, но содержащийся в переданном тексте ПС конвертируется в ВК+ПС.
ЗаписатьСтроку записывает текст и добавляет РазделительСтрок. Поэтому после Ручка будет один ПС.
ПрочитатьСимволы нормализует ВК+ПС обратно в ПС; полученную строку проверяем целиком.
Для построчного чтения создаём новый экземпляр с начала данных. ПрочитатьСтроку возвращает текст без завершающего разделителя.
Как проверить результат
Сырые данные содержат Книга + ВК+ПС + Ручка + ПС; после нормализации оба разделителя — ПС.
Два построчных вызова возвращают Книга и Ручка; все сравнения Истина.
Ожидаемый результат
Показано, где возникают разделители и как нормализация влияет на текст.
На что обратить внимание
ЗаписатьСимволы — не побайтовая запись: преобразование переводов строк предусмотрено API.
Позиция чтения продвигается. Для повторного разбора от начала создаём новый ЧтениеДанных.
Для точного двоичного формата передавайте ДвоичныеДанные/БуферДвоичныхДанных, а не текст с неявной конвертацией.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.